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

如何创建包含列名与唯一值的新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:15:16