我有一个数据帧
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
Run Code Online (Sandbox Code Playgroud)
我需要获取member_id val 2377264 [14,1] 289719 [6,12,0,3]接下来我要对列表中的元素求和,如果列表中有0,则写入.我的意思是
member_id val
2377264 [15]
289719 [18, 0, 0, 3]
Run Code Online (Sandbox Code Playgroud)
我试过了
vals = []
print df.groupby('member_id')['val'].apply(lambda x: vals.append(x))
Run Code Online (Sandbox Code Playgroud)
但它返回列中的所有None值.我该如何解决这个问题?
试试这个
df.groupby('member_id')['val'].apply(lambda x: list(x))
Run Code Online (Sandbox Code Playgroud)
产量
member_id
289719 [6, 12, 0, 0, 3]
2377264 [14, 1]
Name: val, dtype: object
Run Code Online (Sandbox Code Playgroud)
df.groupby('member_id')['val'].apply(lambda x: list(x)).tolist()
Run Code Online (Sandbox Code Playgroud)
产量
[[6, 12, 0, 0, 3], [14, 1]]
Run Code Online (Sandbox Code Playgroud)
df.groupby('member_id')['val'].apply(lambda x: list(x)).to_dict()
Run Code Online (Sandbox Code Playgroud)
产量
{2377264: [14, 1], 289719: [6, 12, 0, 0, 3]}
Run Code Online (Sandbox Code Playgroud)
df.groupby('member_id')['val'].apply(lambda x: sum(x))
Run Code Online (Sandbox Code Playgroud)
产量
member_id
289719 21
2377264 15
Name: val, dtype: int64
Run Code Online (Sandbox Code Playgroud)
根据你的评论,你需要得到一个val列表和0之间的和元素,为此你应该使用下面的代码
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
Run Code Online (Sandbox Code Playgroud)
sumNumberBetweenZero(df["val"].tolist())
Run Code Online (Sandbox Code Playgroud)
产量
[33L, 0, 0L, 3L]
Run Code Online (Sandbox Code Playgroud)
member_iddf.groupby('member_id')['val'].apply(lambda x: sumNumberBetweenZero((x))
Run Code Online (Sandbox Code Playgroud)
产量
member_id
289719 [18, 0, 0, 3]
2377264 [15]
Name: val, dtype: object
Run Code Online (Sandbox Code Playgroud)
sumNumberBetweenZero([1, 2, 5, 0, 3,2, 6, 7, 45, 0, 23, 0, 0, 0, 34])
Run Code Online (Sandbox Code Playgroud)
产量
[8, 0, 63, 0, 23, 0, 0, 0, 34]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10102 次 |
| 最近记录: |