【发布时间】:2022-11-28 22:37:28
【问题描述】:
好的,这更多是关于如何正确使用 groupby 方法的问题,因为我有点难以使用 DataFrameGroupBy 对象本身。基本上我有一个具有以下结构的大 DataFrame:
| DATE | PRODUCT | PRICE | CAPACITY |
|---|---|---|---|
| 01.07.2022 | NEG_00_04 | 3,7 | 7 |
| 01.07.2022 | NEG_00_04 | 1,7 | 3 |
| 01.07.2022 | NEG_00_04 | 2,4 | 5 |
| 01.07.2022 | NEG_00_04 | 2,2 | 7 |
| 01.07.2022 | POS_00_04 | 3,7 | 2 |
| 01.07.2022 | POS_00_04 | 3,2 | 5 |
| 01.07.2022 | POS_00_04 | 1,5 | 2 |
| 01.07.2022 | POS_00_04 | 2,4 | 3 |
我的目标是按“日期”和“产品”列分组,并根据价格上涨获得累积容量。所以基本上操作顺序是按两列分组,然后按“PRICE”列对每个组进行排序并计算累积容量。基于示例表的最终结果应如下所示:
| DATE | PRODUCT | PRICE | CAPACITY | CUMULATIVE |
|---|---|---|---|---|
| 01.07.2022 | NEG_00_04 | 1,7 | 3 | 3 |
| 01.07.2022 | NEG_00_04 | 2,2 | 7 | 10 |
| 01.07.2022 | NEG_00_04 | 2,4 | 5 | 15 |
| 01.07.2022 | NEG_00_04 | 3,7 | 7 | 22 |
| 01.07.2022 | POS_00_04 | 1,5 | 2 | 2 |
| 01.07.2022 | POS_00_04 | 2,4 | 3 | 5 |
| 01.07.2022 | POS_00_04 | 3,2 | 5 | 10 |
| 01.07.2022 | POS_00_04 | 3,7 | 2 | 12 |
我已经有了一个可行的解决方案,但我想知道是否有更好的方法来处理 DataFrameGroupBy 对象,因为我总是只是用 for 循环遍历它们,但它似乎不正确。我就是这样做的:
df_result = pd.DataFrame()
for i, group in df.groupby(by=['DATE', 'PRODUCT']):
group.sort_values('PRICE', inplace=True)
group['CUMULATIVE'] = group['CAPACITY'].cumsum()
df_result = pd.concat([df_result, group], ignore_index=True)
我将不胜感激任何改进建议:)
【问题讨论】:
标签: python pandas dataframe group-by data-science