如何创建包含列名与唯一值的新DataFrame?
问题分析与解决
原代码的错误点
- 列引用语法错误:
df(col)是错的,Pandas里访问DataFrame列必须用方括号[],也就是df[col]。圆括号()是用来调用DataFrame方法(比如df.sum())的,不是用来取列的。 - 结果结构不符合预期:原循环把每个列的唯一值列表当成行添加,最后会得到行对应原列、列对应唯一值位置的结构,完全不是你要的「列名 + 唯一值列表」两列格式。
正确实现方法
方法1:Pandas原生高效实现(推荐)
不用写循环,一行式搞定,效率更高:
import pandas as pd # 先模拟你的原始DataFrame df = pd.DataFrame({ "ID": ["01", "02", "03", "04"], "Name": ["Bennett", "Sally", "Ben", "Bennett"], "Zip": ["10115", "10119", "11001", "10119"], "Type": ["House", "Apt", "House", "House"] }) # 生成目标结构的DataFrame df_unique = pd.DataFrame({ "Column": df.columns, "List_of_unique": df.apply(lambda x: ", ".join(x.unique().tolist())) })
运行后得到的df_unique就是你要的效果:
Column List_of_unique 0 ID 01, 02, 03, 04 1 Name Bennett, Sally, Ben 2 Zip 10115, 10119, 11001 3 Type House, Apt
方法2:修正循环实现
如果一定要用循环,调整逻辑直接构建数据列表再转DataFrame,比逐行添加高效:
df_unique = pd.DataFrame() data_rows = [] for col in df.columns: # 修正列引用,把唯一值转成逗号分隔的字符串 unique_str = ", ".join(df[col].unique().tolist()) data_rows.append({"Column": col, "List_of_unique": unique_str}) df_unique = pd.DataFrame(data_rows)
补充说明
- 如果你的列是数值类型(比如ID是整数),可以先转字符串再用
join,或者去掉", ".join()直接存列表格式。 - 原生
apply方法比循环快很多,处理大数据集时差距更明显。
内容的提问来源于stack exchange,提问作者Jurassic_Question
相关产品推荐
相关产品推荐

