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
相关产品推荐
相关产品推荐

