如何为Pandas DataFrame添加按{prop,weeknum}分组的频率列
给Pandas DataFrame按{prop, weeknum}分组添加总行数字段
嘿,这个需求用Pandas的groupby结合transform就能轻松搞定,完全能实现你要的效果——每个分组的每一行都会带上该分组的总行数。
首先,先把你提供的示例数据构造成DataFrame:
import pandas as pd data = { 'TransID': ['A1234', 'B234', 'C333', 'D444'], 'prop': ['a', 'a', 'b', 'b'], 'weeknum': [1, 1, 1, 1] } df = pd.DataFrame(data)
接下来就是核心操作:按prop和weeknum分组,统计每组的行数,并用transform把结果广播到原DataFrame的每一行,这里有两种简洁的写法:
# 方法1:用count(),指定任意非空列即可 df['group_count'] = df.groupby(['prop', 'weeknum'])['TransID'].transform('count') # 方法2:用size(),更简洁,无需指定具体列 df['group_count'] = df.groupby(['prop', 'weeknum']).transform('size')
两种方法都能得到你想要的结果——新列group_count的所有值都是2,因为每个{prop, weeknum}分组都刚好有2行数据。运行后你的DataFrame会变成这样:
| TransID | prop | weeknum | group_count |
|---|---|---|---|
| A1234 | a | 1 | 2 |
| B234 | a | 1 | 2 |
| C333 | b | 1 | 2 |
| D444 | b | 1 | 2 |
这里选transform而不是其他分组方法的原因是:它会保持原DataFrame的行数,自动把分组计算的结果对应到每一行,而普通的agg只会返回每个分组的汇总结果,没法直接合并回原数据。
内容的提问来源于stack exchange,提问作者Mark Ginsburg
相关产品推荐
相关产品推荐

