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

Python中使用Pandas无需melt按行统计多列大小写混合值的方法

解决方法:不使用melt统计多列国家出现次数

首先我注意到你的数据里国家名称存在大小写不一致的问题(比如Italy和italy、france和France),这会导致统计时误判为不同国家,所以第一步得先统一格式。接下来我们可以通过逐行提取国家列并扁平化数据的方式来实现需求,完全不需要用到melt。

具体代码实现

import pandas as pd

# 构建你提供的原始DataFrame
df = pd.DataFrame({
    'COUNTRY': ['Italy', 'uk'],
    'COUNTRY1': ['uk', 'france'],
    'COUNTRY2': ['france', 'italy'],
    'hp': [50, 150]
})

# 1. 提取所有国家相关列,并统一转为首字母大写格式
country_columns = df[['COUNTRY', 'COUNTRY1', 'COUNTRY2']].apply(lambda col: col.str.title())

# 2. 把每行的三个国家值拆分为单个元素,形成一维序列
all_countries = country_columns.apply(pd.Series, axis=1).stack()

# 3. 统计每个国家的出现次数
count_result = all_countries.value_counts()

# 输出预期格式的结果
for country, count in count_result.items():
    print(f"{country} {count}")

代码逻辑解释

  • 统一大小写:用str.title()将所有国家名称转为首字母大写格式,解决大小写差异导致的统计错误(比如italy和Italy会被识别为同一个国家)。
  • 扁平化数据:通过apply(pd.Series, axis=1).stack()把每行的三个国家列拆成独立元素,形成一个长序列,这样就能直接用value_counts()做频率统计。
  • 输出结果:最终会得到你想要的输出:
    Italy 2
    France 2
    Uk 2
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:52:39