Python如何将现有DataFrame某列的取值转为新列生成新DataFrame?
Pandas 列转宽表实现方案
你需要的是pandas中的透视转换操作,将指定列的唯一取值转换为新的列名,对应数值填充到新列中,实现代码如下:
- 首先确认原始DataFrame的3个核心字段:
- 行保留字段:转换后作为每行唯一标识的列(如示例中的用户ID列,假设列名为
user_id) - 列来源字段:需要将取值转为新列的目标列(假设列名为
category) - 值填充字段:转换后新列中要填充的数值对应的原列(假设列名为
score)
- 行保留字段:转换后作为每行唯一标识的列(如示例中的用户ID列,假设列名为
无重复数据场景
如果同一个user_id + category组合在原始表中只有一条数据,直接用pivot方法:
import pandas as pd # df为你的原始DataFrame new_df = df.pivot( index="user_id", columns="category", values="score" ).reset_index() # 可选:清理列名的额外标识,让表结构更符合预期 new_df.columns.name = None
有重复数据场景
如果同一个user_id + category组合存在多条数据,需要指定聚合规则,用pivot_table方法:
import pandas as pd # aggfunc可根据需求替换为'mean'、'max'、'count'等聚合函数 new_df = pd.pivot_table( df, index="user_id", columns="category", values="score", aggfunc="sum" ).reset_index() new_df.columns.name = None
示例验证
你可以用以下构造的测试数据验证效果,和你给出的示例场景完全匹配:
# 构造原始测试数据 df = pd.DataFrame({ "user_id": [1,1,2,2,3,3], "category": ["A","B","A","B","A","B"], "score": [90,85,78,92,88,76] })
运行上述转换代码后即可得到你需要的目标DataFrame格式。
内容的提问来源于stack exchange,提问作者Kpyroop
相关产品推荐
相关产品推荐

