Pandas - 每个唯一 ID 的累计总和
Pandas - Cumulative sum for each unique id
我需要为每个唯一 id 求和,我的 df:
id date num
0 4124 01.03.2021 3607
1 2155 01.03.2021 3500
2 1258 01.03.2021 2000
3 1112 01.03.2021 5000
4 1258 01.03.2021 3200
结果:
id date num RESULT
0 4124 01.03.2021 3607 3607
1 2155 01.03.2021 3500 3500
2 1258 01.03.2021 2000 2000
3 1112 01.03.2021 5000 5000
4 1258 01.03.2021 3200 5200
像这样试过,但行不通
def grouper(x):
d = x.rename('id').to_frame().reset_index()
return d.groupby(pd.Grouper(key='id')).cumcount()
df['RESULT'] = df.groupby(['id']).transform(grouper)
df['RESULT'] = df['num'].groupby(df['id']).cumsum()
结果:
id
date
num
RESULT
0
4124
01.03.2021
3607
3607
1
2155
01.03.2021
3500
3500
2
1258
01.03.2021
2000
2000
3
1112
01.03.2021
5000
5000
4
1258
01.03.2021
3200
5200
您可以为此使用 lambda 函数:
df['Result'] = df.apply(lambda row : sum(df[df.id == row['id']]['num']) , axis = 1)
输出:
id date num Result
0 4124 01.03.2021 3607 3607
1 2155 01.03.2021 3500 3500
2 1258 01.03.2021 2000 5200
3 1112 01.03.2021 5000 5000
4 1258 01.03.2021 3200 5200
我需要为每个唯一 id 求和,我的 df:
id date num
0 4124 01.03.2021 3607
1 2155 01.03.2021 3500
2 1258 01.03.2021 2000
3 1112 01.03.2021 5000
4 1258 01.03.2021 3200
结果:
id date num RESULT
0 4124 01.03.2021 3607 3607
1 2155 01.03.2021 3500 3500
2 1258 01.03.2021 2000 2000
3 1112 01.03.2021 5000 5000
4 1258 01.03.2021 3200 5200
像这样试过,但行不通
def grouper(x):
d = x.rename('id').to_frame().reset_index()
return d.groupby(pd.Grouper(key='id')).cumcount()
df['RESULT'] = df.groupby(['id']).transform(grouper)
df['RESULT'] = df['num'].groupby(df['id']).cumsum()
结果:
id | date | num | RESULT | |
---|---|---|---|---|
0 | 4124 | 01.03.2021 | 3607 | 3607 |
1 | 2155 | 01.03.2021 | 3500 | 3500 |
2 | 1258 | 01.03.2021 | 2000 | 2000 |
3 | 1112 | 01.03.2021 | 5000 | 5000 |
4 | 1258 | 01.03.2021 | 3200 | 5200 |
您可以为此使用 lambda 函数:
df['Result'] = df.apply(lambda row : sum(df[df.id == row['id']]['num']) , axis = 1)
输出:
id date num Result
0 4124 01.03.2021 3607 3607
1 2155 01.03.2021 3500 3500
2 1258 01.03.2021 2000 5200
3 1112 01.03.2021 5000 5000
4 1258 01.03.2021 3200 5200