如何计算熊猫数据框中每组的行数并将其添加到原始数据中

Posted

技术标签:

【中文标题】如何计算熊猫数据框中每组的行数并将其添加到原始数据中【英文标题】:How to calculate number of rows per group in pandas dataframe and add it to original data 【发布时间】:2021-01-22 16:48:34 【问题描述】:

我有如下数据框 df

ID   COMMODITY_CODE   DELIVERY_TYPE  DAY   Window_start  case_qty     deliveries. 
6042.0      SCGR        Live         1.0    15:00                 15756.75    7.75
6042.0      SCGR        Live         1.0    18:00                 15787.75    5.75
6042.0      SCGR        Live         1.0    21:00                 10989.75    4.75
6042.0      SCGR        Live         2.0    15:00                 21025.25    9.00
6042.0      SCGR        Live         2.0    18:00                 16041.75    5.75

我想要下面的输出,我按 ID、COMMODITY_CODE、DELIVERY_TYPE、DAY 分组并计算 window_count,如下所示

ID   COMMODITY_CODE  DELIVERY_TYPE  DAY   Window_start  window_count   case_qty   deliveries
6042.0      SCGR        Live         1.0    15:00          3             15756.75     7.75
6042.0      SCGR        Live         1.0    18:00          3            15787.75      5.75
6042.0      SCGR        Live         1.0    21:00          3            10989.75      4.75
6042.0      SCGR        Live         2.0    15:00          2             21025.25     9.00
6042.0      SCGR        Live         2.0    18:00          2             16041.75     5.75      

我通过 agg 尝试了下面的代码。

df = df.groupby(['ID','CHAMBER_TYPE','COMMODITY_CODE','DELIVERY_TYPE','DAY'],as_index=False)\
                     .agg(window_count=("DAY", "count"))

尽管它会计算每个 ID、COMMODITY_CODE、DELIVERY_TYPE、DAY 组的窗口数,但它会删除旧列,即 Window_start、case_qty、deliveries

即我得到低于不想要的输出

ID   COMMODITY_CODE  DELIVERY_TYPE  DAY   window_count 
6042.0      SCGR        Live         1.0               3             
6042.0      SCGR        Live         1.0               3            
6042.0      SCGR        Live         1.0               3            
6042.0      SCGR        Live         2.0               2             
6042.0      SCGR        Live         2.0               2               

【问题讨论】:

【参考方案1】:

您正在寻找transform:

df['window_count'] = df.groupby(['ID','CHAMBER_TYPE','COMMODITY_CODE','DELIVERY_TYPE','DAY'])['ID'].transform('size')

顺便说一句,您的示例数据中没有 'CHAMBER_TYPE' 列。

【讨论】:

transform前需要添加列:df['window_count'] = df.groupby(['ID','COMMODITY_CODE','DELIVERY_TYPE','DAY']).DAY.transform('size')

以上是关于如何计算熊猫数据框中每组的行数并将其添加到原始数据中的主要内容,如果未能解决你的问题,请参考以下文章

选择每组的最大行数 - 熊猫性能问题

如何使用每组的行数作为条件对数据框进行子集化

计算数据框中高于阈值的行数作为函数或其他列因子

如何计算熊猫数据框中每一列的唯一性?

如何获取熊猫数据框中的行,列中具有最大值并保留原始索引?

熊猫数据框中的行排序和聚合