【问题标题】:Better way to use pandas DataFrameGroupBy objects使用 pandas DataFrameGroupBy 对象的更好方法
【发布时间】: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


    【解决方案1】:

    利用:

    df = df.sort_values('PRICE')
    df['CUMULATIVE'] = df.groupby(by=['DATE', 'PRODUCT'])['CAPACITY'].cumsum()
    

    或者:

    df = df.sort_values(['PRICE','DATE', 'PRODUCT'])
    df['CUMULATIVE'] = df.groupby(by=['DATE', 'PRODUCT'])['CAPACITY'].cumsum()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-30
      • 2014-02-02
      • 2014-10-06
      • 1970-01-01
      • 2019-01-17
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多