pandas中按字符串列聚合DataFrame 统计name与value组合下country列计数
问题原因
- 现有代码不符合预期主要有两个原因:
- pandas
groupby默认会丢弃分组键里的NaN/缺失值,所以country列为空的分组直接被排除,不会进入统计 - 用
agg({"country": "count"})的方式聚合后,结果会自带MultiIndex,且列名和结构和预期输出不一致
- pandas
正确实现代码
只需要给groupby添加dropna=False参数保留空值分组,用size()统计每组的行数,再重置索引重命名计数列即可:
grouped = dfB.groupby(["name", "value", "country"], dropna=False).size().reset_index(name="count")
如果country列的空值是空白字符串而非pandas默认的NaN,无需额外处理,上述代码会自动将空白字符串当做独立类别统计,最终输出的结构和你给出的预期结果完全一致。
如果你使用的pandas版本低于1.1.0(不支持
dropna参数),可以先将country列的缺失值替换为占位符再分组,最后再替换回空值即可:dfB['country'] = dfB['country'].fillna('temp_placeholder') grouped = dfB.groupby(["name", "value", "country"]).size().reset_index(name="count") grouped['country'] = grouped['country'].replace('temp_placeholder', '')
内容的提问来源于stack exchange,提问作者Dawn.Sahil
相关产品推荐
相关产品推荐

