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

基于列与行索引合并两个Pandas DataFrame的实现方案咨询

Pandas DataFrame 合并实现方案

你要实现的效果本质是将长结构的df1转换为宽结构,直接用pivot方法即可完成,不需要依赖df2,如果需要对齐df2的列结构也可以通过关联合并实现。

首先确认已导入pandas库:

import pandas as pd

你给出的示例df1、df2构造代码:

# 构造df1
lst=[[1,'Stocks',0.5],[1,'Bonds',0.5],[2,'Stocks',0.3],[2,'Bonds',0.3],[2,'AI',0.4]]
df1=pd.DataFrame(lst,columns=['PfNr','AK','Wght'])

# 构造df2
lst=[[1,'NaN','NaN','NaN'],[2,'NaN','NaN','NaN']]
df2=pd.DataFrame(lst,columns=['PfNr','Bonds','Stocks','AI'])

方法1:直接转换df1得到目标df3(无需使用df2)

# 透视长表转宽表
df3 = df1.pivot(index='PfNr', columns='AK', values='Wght').reset_index()
# 清除列索引名称
df3.columns.name = None
# 空值替换为字符串'NaN',和你给出的目标格式一致
df3 = df3.fillna('NaN')
# 调整列顺序匹配目标df3
df3 = df3[['PfNr', 'Bonds', 'Stocks', 'AI']]

方法2:结合df2合并(适用于df2存在其他需要保留的列的场景)

# 先把df1转成宽表
df1_wide = df1.pivot(index='PfNr', columns='AK', values='Wght').reset_index()
df1_wide.columns.name = None
# 以PfNr为关联键和df2合并,用df1的数值填充df2的空值
df3 = df2[['PfNr']].merge(df1_wide, on='PfNr', how='left').fillna('NaN')

注意事项

  • 如果你的实际业务场景中,同一个PfNr和AK组合存在多个重复值,需要替换pivot为pivot_table方法,指定aggfunc参数做聚合,比如求和aggfunc='sum'、取均值aggfunc='mean'等,避免报错。

执行print(df3)即可得到和需求一致的结果:

PfNr  Bonds  Stocks   AI
0     1    0.5     0.5  NaN
1     2    0.3     0.3  0.4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:54:07