You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas 按国家分组统计操作项计数并输出指定格式结果

原有实现的核心问题
  • 数据构建逻辑错误:直接将pd.MultiIndex对象作为pd.DataFrame()的入参,本质是把多层索引当成单列数据,没有将国家、操作类型拆分为两个独立的表格字段,后续所有统计都基于错误结构展开
  • 缺失核心统计逻辑:全程没有对「国家+操作类型」的组合做频次计数,只是把同国家对应的操作类型收集成普通列表,完全没有计算每个操作的出现次数
  • 输出结构不匹配:最终生成的是包含国家列表、操作列表的普通两列DataFrame,和要求的嵌套字典结构存在本质偏差
正确实现方案

首先导入依赖并加载题目给定的原始数据:

import pandas as pd

# 对应题目给定的原始数据条目
countrylist = ["India", "Malaysia", "Croatia", "India", "India", "Malaysia", "Malaysia"]
opslist = ["A", "B", "C", "C", "C", "D", "A"]

先将原始列表组装为标准两列表格:

df = pd.DataFrame({
    "country": countrylist,
    "operations": opslist
})

方案1:pandas内置方法快速实现

通过分组+计数的链式操作直接生成目标结构,核心逻辑是按国家分组后,对操作类型做频次统计,转换为指定嵌套格式:

# 按国家分组,对操作类型做计数,直接转换为嵌套字典
result = df.groupby("country")["operations"].value_counts().unstack().to_dict("index")

注:pandas会自动剔除单元格值为NaN的键值对,最终输出的字典和目标格式完全一致:{"India":{"A":1,"C":2},"Malaysia":{"B":1,"A":1,"D":1},"Croatia":{"C":1}}

方案2:手动遍历实现(版本兼容性更强)

如果担心不同pandas版本的to_dict行为存在差异,可以通过遍历分组手动构建嵌套字典,逻辑更可控:

result = {}
for country, group_data in df.groupby("country"):
    # 统计当前国家下各操作类型的出现次数,转换为字典
    result[country] = group_data["operations"].value_counts().to_dict()

该方法不受unstack的空值逻辑影响,最终输出结构和目标完全匹配。


内容的提问来源于stack exchange,提问作者prj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 19:15:04