繁体   English   中英

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

[英]How to calculate number of rows per group in pandas dataframe and add it to original data

我有如下所示的数据框 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               

您正在寻找transform

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM