如何无数据损失合并多个pandas的value_counts统计结果?
合并多个pandas value_counts统计结果的正确方法
直接对多个value_counts结果执行加法运算时,pandas会严格对齐索引,仅在单个Series中存在的元素会因为索引缺失被填充为NaN,导致统计错误。可以用以下两种方法正确合并:
方法一:使用add()方法并填充缺失值
利用Series.add()的fill_value参数,将缺失的索引位置默认值设为0后再相加,最后转回整数类型并排序即可:
import pandas as pd a = pd.Series([1,2,2,None], dtype=object) b = pd.Series([3,2,2,None], dtype=object) vc_a = a.value_counts(dropna=False) vc_b = b.value_counts(dropna=False) # 合并统计结果 combined_vc = vc_a.add(vc_b, fill_value=0) # 转换为整数类型(add后默认是float) combined_vc = combined_vc.astype(int) # 按统计量降序排序,和concat后的结果一致 combined_vc = combined_vc.sort_values(ascending=False)
执行后得到的结果:
2 4 None 2 1 1 3 1 Name: count, dtype: int64
方法二:批量合并后分组求和
如果有多个统计Series(比如vc_a、vc_b、vc_c...),可以把它们放入列表,用pd.concat合并后按索引分组求和:
vc_list = [vc_a, vc_b] combined_vc = pd.concat(vc_list).groupby(level=0).sum().sort_values(ascending=False).astype(int)
这两种方法都能完美解决单个Series元素统计值变为NaN的问题,得到和直接拼接原Series后统计一致的结果。
内容的提问来源于stack exchange,提问作者sds
相关产品推荐
相关产品推荐

