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

如何将DataFrame中B列行值转为新列,映射C列值完成宽表转换

错误原因

你写的代码出现NaN是因为单独过滤出的C列Series保留了原始DataFrame的索引,和你初始化的只包含B==b1行的df索引不匹配,pandas赋值时会按索引对齐,不在初始化df索引范围内的位置就会填充NaN。

正确实现

你的需求是典型的长表转宽表场景,直接用pandas内置的pivot/pivot_table方法即可实现,不需要自己写循环。

格式2(全B值转列)实现代码

# 基础转换,B列所有值都转为新列
df_wide = main_df.pivot(
    index="A",  # 分组保留的根节点列,多内部节点可传列表如["A", "D", "E"]
    columns="B", # 要转成列名的字段
    values="C"  # 新列的取值来源字段
).reset_index()

# 可选:按需求重命名列名
df_wide.columns = ["A", "B1", "B2"]

格式1(指定部分B值转列)实现代码

desired_cols = ["b1"] # 按需指定要保留的B列值
df_wide = main_df[main_df["B"].isin(desired_cols)].pivot(
    index="A",
    columns="B",
    values="C"
).reset_index()

# 可选:重命名列
df_wide.columns = ["A", "B1"]

兼容重复键场景

如果存在同一A、B组合对应多个C值的情况,改用pivot_table指定聚合规则即可避免报错:

df_wide = main_df.pivot_table(
    index="A",
    columns="B",
    values="C",
    aggfunc="first" # 重复值取第一个,可根据业务需求替换为sum、last等规则
).reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:54:05