【发布时间】:2021-05-14 15:26:13
【问题描述】:
我正在尝试创建一个函数,该函数将遍历数据框中的 date_id 列,并为每 6 个连续值创建一个组,并对“value”列中的值求和,然后还返回每个组的最大值六个以及结果。
date_id item_id value
0 1828 32 1180727.00
1 1828 43 944937.00
2 1828 40 806681.00
3 1828 42 721810.02
4 1828 36 567950.00
5 1828 45 545306.38
6 1828 26 480506.00
7 1828 53 375788.00
8 1828 37 236000.00
9 1828 38 234780.00
10 1828 21 208998.47
11 1828 41 135000.00
12 1797 39 63420.00
13 1828 28 24410.00
14 1462 52 0.00
15 1493 16 0.00
16 1493 17 0.00
17 1493 18 0.00
18 1493 15 0.00
19 1462 53 0.00
20 1462 47 0.00
21 1462 51 0.00
22 1462 50 0.00
23 1462 49 0.00
24 1462 45 0.00
每个 item_id 的期望输出是
date_id item_id value
0 max value from each date group 36 sum of all values in each date grouping
我尝试过使用 lambda
df_rslt = df.groupby('date_id')['value'].apply(lambda grp: grp.nlargest(6).sum())
但很快意识到这只会返回一个结果。
然后我在 for 循环中尝试了类似的方法,但没有成功
grp_data = df.groupby(['date_id','item_id'])
.aggregate({'value':np.sum})
df_rslt = grp_data.groupby('date_id')
.apply(lambda x: x.nlargest(6,'value'))
.reset_index(level=0, drop=True)
【问题讨论】:
标签: python-3.x pandas numpy group-by