gpt4 book ai didi

python - 根据 groupby 之后其他列中的值之间的数据框范围对单独的列求和

转载 作者:太空宇宙 更新时间:2023-11-04 01:49:23 25 4
gpt4 key购买 nike

我有一个数据框如下

id  Supply  days    days_180
1 30 0 180
1 100 183 363
1 80 250 430
2 5 0 180
2 5 10 190
3 5 0 180
3 30 100 280
3 30 150 330
3 30 200 380
3 30 280 460
3 50 310 490

我想对每一行的天数介于“天数”和“天数+180”之间的“供应”求和。这需要在 groupby('id') 之后为每个组完成。

预期输出如下

id  Supply  days    days_180    use
1 30 0 180 30
1 100 183 363 180
1 80 250 430 80
2 5 0 180 10
2 5 10 190 10
3 5 0 180 65
3 30 100 280 120
3 30 150 330 140
3 30 200 380 110
3 30 280 460 80
3 50 310 490 50

我已经尝试了下面的代码,但它没有按预期工作。

df_d['use']=df_d.groupby('id').apply(lambda x: x.loc[x['days'].between(x['days'],x['days_180']),'supply'].sum())

最佳答案

使用列表推导式循环每组 days_180 值,使用 sum 过滤并创建新列:

def f(x):
a = [x.loc[(x['days'] <= d) & (x['days_180'] >= d),'Supply'].sum() for d in x['days_180']]
x['use'] = a
return x

或使用另一个 lambda 的解决方案:

def f(x):
x['use'] = x['days_180'].apply(lambda d: x.loc[(x['days'] <= d) &
(x['days_180'] >= d), 'Supply'].sum())
return x


df_d = df_d.groupby('id').apply(f)
print (df_d)
id Supply days days_180 use
0 1 30 0 180 30
1 1 100 183 363 180
2 1 80 250 430 80
3 2 5 0 180 10
4 2 5 10 190 5
5 3 5 0 180 65
6 3 30 100 280 120
7 3 30 150 330 140
8 3 30 200 380 110
9 3 30 280 460 80
10 3 50 310 490 50

关于python - 根据 groupby 之后其他列中的值之间的数据框范围对单独的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58388726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com