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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:32:52