基于groupby之后其他列中值之间的数据帧范围求和一个单独的列

问题描述 投票:0回答:1

我有如下数据框

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())
python pandas dataframe pandas-groupby
1个回答
0
投票

用途:

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
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.