try this
1.如果你想要val列表
df.groupby('member_id')['val'].apply(lambda x: list(x))
output
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()
output
[[6, 12, 0, 0, 3], [14, 1]]
3. 获取字典
df.groupby('member_id')['val'].apply(lambda x: list(x)).to_dict()
output
{2377264: [14, 1], 289719: [6, 12, 0, 0, 3]}
4. 获取总和
df.groupby('member_id')['val'].apply(lambda x: sum(x))
output
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())
output
[33L, 0, 0L, 3L]
5.B.获取值的总和member_id
df.groupby('member_id')['val'].apply(lambda x: sumNumberBetweenZero((x))
output
member_id
289719 [18, 0, 0, 3]
2377264 [15]
Name: val, dtype: object
5.三.对于作为示例给出的列表
sumNumberBetweenZero([1, 2, 5, 0, 3,2, 6, 7, 45, 0, 23, 0, 0, 0, 34])
output
[8, 0, 63, 0, 23, 0, 0, 0, 34]