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

如何基于另一DataFrame的属性列生成含指定字段的最终DataFrame?

问题描述

现有两个DataFrame:

df

nameage
0Robert21
1Bob22
2Mike23

df2

nameattributevalue
0Robertemailrobert@email.com
1Bobemailbob@email.com
2Robertmarried?Yes
3Mikemarried?No
4Mikeemployed?Yes
5Roberthave a car?Yes
6Bobhave a car?No

已知人员的所有属性包括:age、email、married?、employed?、have a car?、imigrant?、student?,需要生成目标DataFrame df_final:

df_final

nameageemailmarried?employed?have a car?imigrant?student?
0Robert21robert@email.comYesYes
1Bob22bob@email.comNo
2Mike23NoYes

曾尝试手动为df添加属性列,再使用df.loc[df['name']==df2['name'], df2['attribute']]插入对应值,但未成功。

解决方案

通过透视df2再与df合并的方式可以快速实现需求,步骤如下:

  1. 将df2转为宽格式,把attribute的内容作为列名,value作为对应单元格的值:
df2_pivot = df2.pivot(index='name', columns='attribute', values='value').reset_index()

执行后会得到以name为标识、各属性为列的DataFrame,缺失的属性值默认填充NaN。

  1. 按name列将df和透视后的df2_pivot左合并:
df_final = df.merge(df2_pivot, on='name', how='left')
  1. 补充缺失的属性列并调整列顺序,同时将NaN替换为空字符串匹配目标格式:
# 定义所有需要的属性列
all_columns = ['name', 'age', 'email', 'married?', 'employed?', 'have a car?', 'imigrant?', 'student?']
# 重新排列列,缺失的列会自动添加
df_final = df_final.reindex(columns=all_columns)
# 将NaN替换为空字符串
df_final = df_final.fillna('')

执行完以上代码后,就能得到与目标一致的df_final。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:37:02