如何按组对数据框中的值求和,直到其他列中的某些值为止?
How to sum values in dataframe until certain values in other column by group?
我有一个数据框:
id life_day value
a1 1 10
a1 2 20
a1 3 10
a1 4 5
a1 5 5
a1 6 1
b2 1 7
b2 3 11
b2 4 10
b2 5 20
我想对每个 id 的值求和,直到 life_day
4。所以期望的结果是:
id life_day value
a1 4 45
b2 4 28
怎么做?我尝试了 df[df["life_day"] == 90].groupby("id).sum()
但得到了错误的结果
你的方法差不多可行,但我不知道你为什么在 df["life_day"] == 90
中写 == 90
,看起来你想要 max life_day
,不是总和。
df[df['life_day'] <= 4].groupby('id').agg({'life_day': 'max', 'value': 'sum'})
life_day value
id
a1 4 45
b2 4 28
使用pandas where条件屏蔽然后groupby agg
df.where(df['life_day'].le(4)).groupby('id').agg({'life_day':'last','value':'sum'}).reset_index()
id life_day value
0 a1 4.0 45.0
1 b2 4.0 28.0
我有一个数据框:
id life_day value
a1 1 10
a1 2 20
a1 3 10
a1 4 5
a1 5 5
a1 6 1
b2 1 7
b2 3 11
b2 4 10
b2 5 20
我想对每个 id 的值求和,直到 life_day
4。所以期望的结果是:
id life_day value
a1 4 45
b2 4 28
怎么做?我尝试了 df[df["life_day"] == 90].groupby("id).sum()
但得到了错误的结果
你的方法差不多可行,但我不知道你为什么在 df["life_day"] == 90
中写 == 90
,看起来你想要 max life_day
,不是总和。
df[df['life_day'] <= 4].groupby('id').agg({'life_day': 'max', 'value': 'sum'})
life_day value
id
a1 4 45
b2 4 28
使用pandas where条件屏蔽然后groupby agg
df.where(df['life_day'].le(4)).groupby('id').agg({'life_day':'last','value':'sum'}).reset_index()
id life_day value
0 a1 4.0 45.0
1 b2 4.0 28.0