Skip to main content
 首页 » 编程设计

python之Pandas :将列转换为列表

2025年05月04日13mate10pro

我有一个数据框

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 值 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。如果你想要 val 列表

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

输出

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

2。获取列表列表

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

输出

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

3。获取字典

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

输出

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

4。求和

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

输出

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

5.获取零之间的数字总和

根据您的评论,您需要获取 0 之间的 vals 和 sum 元素的列表,为此您应该使用以下代码

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 

5.A.获取所有元素的总和

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

输出

[33L, 0, 0L, 3L] 

5.B.通过 member_id

获取值的总和
df.groupby('member_id')['val'].apply(lambda x: sumNumberBetweenZero((x)) 

输出

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

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

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

输出

[8, 0, 63, 0, 23, 0, 0, 0, 34]