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

Python pandas DataFrame操作:通过melt与groupby获取值对应所在列名

解决方案

首先给出完整可运行代码:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'col1': ['B', 'E', np.nan],
    'col2': ['C', 'D', 'F'],
    'col3': ['A', 'G', 'B']
})

# 核心转换逻辑
# 1. 宽表转长表,过滤空值
df_melt = df.melt(var_name='location', value_name='Name').dropna(subset=['Name'])
# 2. 按名称分组,拼接所有出现的列名
result = df_melt.groupby('Name', as_index=False, sort=False)['location'].agg(','.join)

# 输出结果
print(result)

运行后输出结果如下(你示例中B的location写为col1,col2属于笔误,实际原数据中B出现在col1和col3):

Name  location
0    B  col1,col3
1    E      col1
2    C      col2
3    D      col2
4    F      col2
5    A      col3
6    G      col3

如果需要调整为你示例中的排序规则,额外加一行排序逻辑即可:

result = result.sort_values('location').reset_index(drop=True)

逻辑说明

  • melt方法将原DataFrame的列名转为location列的取值,原单元格的取值转为Name列,直接生成「列名-单元格值」的映射长表
  • 按Name分组后对location列执行逗号拼接,即可得到每个值所有出现过的列的汇总结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:48:04