pandas :将列转换为列表 [英] Pandas: convert column to list

查看:125
本文介绍了 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,则将其写入.我的意思是

I need to get member_id val 2377264 [14, 1] 289719 [6, 12, 0, 3] And next I want to sum elements in list and if there is 0 in list, write it. I mean

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

我尝试了

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

,但它在列中返回所有None值. 我该如何解决?

but it returns all None values in a column. How can I fix that?

推荐答案

尝试一下

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.获取零之间的数字总和

根据您的评论,您需要获取val和sum元素之间的列表,并且应该使用波纹管代码

5. Get Sum of numbers between zero's

As per your comment you need to get a list of vals and sum elements between 0's and to do that you should use bellow code

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]

这篇关于 pandas :将列转换为列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆