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