基于其他列条件统计DataFrame指定列值的月度出现次数
实现方案
核心是用groupby+transform组合实现分组统计结果和原表行的对齐,不需要额外做表关联,代码如下:
首先导入依赖、构造测试数据:
import pandas as pd # 构造原始示例数据 df = pd.DataFrame({ 'Date': ['2015-01-02', '2015-02-02', '2015-02-02', '2015-03-02', '2015-03-02', '2015-03-02'], 'name': ['Adam', 'David', 'Adam', 'David', 'Hardik', 'David'] })
然后执行统计逻辑:
# 转换日期列为时间格式 df['Date'] = pd.to_datetime(df['Date']) # 按年月+姓名分组,统计每组出现次数并映射回原表所有行 df['Count'] = df.groupby([df['Date'].dt.to_period('M'), 'name'])['name'].transform('count') # 可选:如果需要日期列恢复为原始字符串格式,执行下行代码 # df['Date'] = df['Date'].dt.strftime('%Y-%m-%d')
执行后输出的df就和给出的预期效果完全一致。
补充说明:transform方法会将分组后的统计结果同步到组内的每一行,不会改变原表的行数,无需额外做表关联操作,是实现这类需求的最优方案。
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

