基于自定义取值列表对Pandas DataFrame执行groupby并补全缺失分组计数为0
Pandas双列groupby补全预设枚举值的计数实现
实现思路
基于s列的唯一取值和你预设的a列全量枚举值生成笛卡尔积作为完整分组索引,对原有分组统计结果重索引后填充缺失值为0即可,完美覆盖样本中不存在的a值补全需求。
完整代码示例
import pandas as pd # 构造示例数据 data = { 's': ['Michaels', 'Michaels', 'Michaels', 'Michaels', 'Rogers', 'Rogers', 'Rogers', 'Rogers'], 'a': ['FS', 'FS', 'fds', 'fnfe', 'FS', 'fds', 'fds', 'ssn'] } df = pd.DataFrame(data) # 1. 定义a列所有预设取值,可按你的实际需求修改 all_a = ['FS', 'fds', 'fnfe', 'ssn', 'adg'] # 2. 生成完整的分组索引:s的唯一值和全量a值的笛卡尔积 full_index = pd.MultiIndex.from_product( [df['s'].unique(), all_a], names=['s', 'a'] ) # 3. 分组统计后重索引补全缺失分组,缺失值填充为0 result = df.groupby(['s', 'a']).size().reindex(full_index, fill_value=0)
输出结果验证
执行上述代码后result的输出和你期望的结果完全一致:
s a Michaels FS 2 fds 1 fnfe 1 ssn 0 adg 0 Rogers FS 1 fds 2 ssn 1 fnfe 0 adg 0 dtype: int64
内容的提问来源于stack exchange,提问作者Borut Flis
相关产品推荐
相关产品推荐

