Pandas如何将所有列合并为一列并以列名为第二列
解决方案
你可以用Pandas内置的**stack()或melt()**方法实现需求,完全不需要嵌套循环,代码更简洁且效率更高:
方法1:使用stack()(推荐,贴合需求)
stack会自动将列索引转为行索引,同时忽略NaN值,之后通过重置索引整理成目标结构:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Japan': ['Tokyo', 'Okinawa', pd.NA, pd.NA], 'UK': ['London', 'Birmingham', 'Manchester', pd.NA], 'USA': ['NYC', 'Chicago', 'LA', 'Austin'] }) # 转换为目标DataFrame result_df = df.stack().reset_index(drop=True).reset_index() result_df.columns = ['城市', '国家'] # 调整列顺序为[城市, 国家] result_df = result_df[['城市', '国家']] # 如果需要直接生成你要的字典结构 city_country_dict = dict(df.stack())
方法2:使用melt()
melt是专门的宽表转长表工具,配合过滤NaN实现需求:
# 转换为目标DataFrame result_df = df.melt(var_name='国家', value_name='城市').dropna(subset=['城市']) result_df = result_df[['城市', '国家']].reset_index(drop=True)
优势对比
- 效率更高:Pandas内置方法基于底层C实现,比Python嵌套循环快数倍,大数据量下差距更明显
- 代码简洁:核心逻辑仅1-2行,可读性强
- 自动处理NaN:无需手动判断空值,方法内置过滤逻辑
内容的提问来源于stack exchange,提问作者Arjun
相关产品推荐
相关产品推荐

