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

如何从DataFrame中提取唯一值及其对应列名并生成新DataFrame?

实现方法

可以通过两种实用方式完成需求,以下是具体步骤和代码:

方法一:利用pandas内置函数(简洁高效)

先将原DataFrame转成长格式,再通过分组聚合收集列名:

import pandas as pd

# 创建原始DataFrame
data = {
    'col1': ['a', 'c', 'e'],
    'col2': ['b', 'd', 'a'],
    'col3': ['b', 'e', 'b']
}
df = pd.DataFrame(data)

# 转成长格式,关联元素与对应列名
melted_df = df.melt(var_name='col_name', value_name='name')
# 按元素分组,收集所有出现过的列名并转为列表
result = melted_df.groupby('name')['col_name'].unique().apply(list).reset_index()
# 按name排序(可选,与示例输出顺序一致)
result = result.sort_values('name').reset_index(drop=True)

print(result)

输出结果与预期一致:

name      col_name
0    a  [col1, col2]
1    b  [col2, col3]
2    c        [col1]
3    d        [col2]
4    e  [col1, col3]

方法二:手动构建字典(逻辑直观)

遍历每一列,用字典存储每个元素对应的列名集合,最后转成DataFrame:

import pandas as pd

# 创建原始DataFrame
data = {
    'col1': ['a', 'c', 'e'],
    'col2': ['b', 'd', 'a'],
    'col3': ['b', 'e', 'b']
}
df = pd.DataFrame(data)

# 初始化字典存储元素与列名的映射
value_col_map = {}
for col in df.columns:
    # 遍历当前列的唯一值
    for val in df[col].unique():
        if val not in value_col_map:
            value_col_map[val] = []
        value_col_map[val].append(col)

# 将字典转为目标DataFrame并排序
result = pd.DataFrame(value_col_map.items(), columns=['name', 'col_name'])
result = result.sort_values('name').reset_index(drop=True)

print(result)

两种方法都能得到预期输出,可根据个人习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:45:57