熊猫:将列转换为列表

时间:2016-11-24 10:38:44

标签: python pandas

我有一个数据框

date    member_id   val
2016-06-01  2377264 14
2016-06-01  289719  6
2016-06-02  289719  12
2016-06-02  2377264 1
2016-06-03  289719  0
2016-06-04  289719  0
2016-06-05  289719  3

我需要得到     member_id val     2377264 [14,1]     289719 [6,12,0,3] 接下来我想在列表中对元素求和,如果列表中有0,则写入。我的意思是

member_id   val
2377264   [15]
289719    [18, 0, 0, 3]

我试过

vals = []
print df.groupby('member_id')['val'].apply(lambda x: vals.append(x))

但它返回列中的所有None值。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:7)

试试这个

1。如果你想要val列表

public

<强>输出

df.groupby('member_id')['val'].apply(lambda x: list(x))

2。获取列表列表

member_id
289719     [6, 12, 0, 0, 3]
2377264             [14, 1]
Name: val, dtype: object

<强>输出

df.groupby('member_id')['val'].apply(lambda x: list(x)).tolist()

3。得到字典

[[6, 12, 0, 0, 3], [14, 1]]

<强>输出

df.groupby('member_id')['val'].apply(lambda x: list(x)).to_dict()

4。得到总和

{2377264: [14, 1], 289719: [6, 12, 0, 0, 3]}

<强>输出

df.groupby('member_id')['val'].apply(lambda x: sum(x))

5。获取零之间的数字之和

根据你的评论,你需要得到一个val列表和0之间的和元素,为此你应该使用下面的代码

member_id
289719     21
2377264    15
Name: val, dtype: int64

5.A。得到所有元素的总和

def sumNumberBetweenZero(values):
    valsum=[0]
    for i in values:
      if i==0:
        if valsum[-1]!=0:valsum.append(0)
        valsum.append(0)
      valsum[-1]+=i
    return valsum

<强>输出

sumNumberBetweenZero(df["val"].tolist())

5.B。通过[33L, 0, 0L, 3L]

得到值的总和
member_id

<强>输出

df.groupby('member_id')['val'].apply(lambda x: sumNumberBetweenZero((x))

5.iii。对于作为示例给出的列表

member_id
289719     [18, 0, 0, 3]
2377264             [15]
Name: val, dtype: object

<强>输出

sumNumberBetweenZero([1, 2, 5, 0, 3,2, 6, 7, 45, 0, 23, 0, 0, 0, 34])