我有如下数据框
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
我想对'Supply'求和,其中每一行的天数介于'days'和'days + 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())
用途:
def f(x):
a = [x.loc[(x['days'] <= d) & (x['days_180'] >= d), 'Supply'].sum() for d in x['days']]
x['use'] = a
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 100
2 1 80 250 430 180
3 2 5 0 180 5
4 2 5 10 190 10
5 3 5 0 180 5
6 3 30 100 280 35
7 3 30 150 330 65
8 3 30 200 380 90
9 3 30 280 460 120
10 3 50 310 490 140