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

