Pandas:将列转换为lis

2024-04-26 03:25:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框

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

我需要得到 会员资格 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值。 我该怎么解决?


Tags: 数据lambdaid元素df列表dateval
1条回答
网友
1楼 · 发布于 2024-04-26 03:25:42

试试这个

一。如果你想要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]]

三。要得到dict

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

输出

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

四。求和

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

输出

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

5个。得到介于零之间的数和

根据您的注释,您需要获得0之间的VAL和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.获取groupbymember_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]

相关问题 更多 >