我有两个数据框。我想在列标题(df2)中找到行(df1)的匹配项
df1
index
1 Reactor1
1 FIC-2005
2 Reactor2
2 FIC-2007
. ...
df2
index
0 FIC-2005 FIC-2007 .....
1 0.005 0.006
2 0.05 0.06
输出到df3
df3
index Reactor1 Reactor2 ....
0
1 FIC-2005 FIC-2007
2 FIC-2005 FIC-2007
3 0.005 0.006
4 0.05 0.06
有人有主意吗?
答案 0 :(得分:0)
我创建了第一个测试数据框,如下所示:
df1 = pd.DataFrame(data=[
[ 1, 'Reactor2' ],
[ 1, 'FIC-2007' ],
[ 2, 'Reactor1' ],
[ 2, 'FIC-2005' ]],
columns=['index', 'text']).set_index('index')
所以我添加了一个列名( text ),您错过了该列名(每个列必须有一个名称)。
要创建第二个测试数据帧,我运行:
df2 = pd.DataFrame(data=[
[ 'FIC-2005', 'FIC-2007' ],
[ 0.005, 0.006 ],
[ 0.05, 0.06 ]]
所以我接受了默认的列名(连续数字)和默认的索引 (也是连续数字)。
从 df1 中可以看到,每对具有相同 index 的行包含:
为确保熊猫做出正确的订购,我特意推翻了 df1 中组的顺序。
第一步是创建“字典表”:
df1a = pd.DataFrame(df1.groupby(level=0).text.agg(list).to_list(),
columns=['Reac', 'FIC']).set_index('FIC')
其中索引为反应堆ID ( FIC ),值为反应堆名称。
结果是:
Reac
FIC
FIC-2007 Reactor2
FIC-2005 Reactor1
然后我阅读 df2 的第一行-包含 FID s的行:
rFIC = df2.iloc[0]
其余步骤为:
代码是:
df2.columns = df1a.reindex(rFIC).iloc[:,0].to_list()
现在,当您打印 df2 时,您将看到正确的列名:
Reactor1 Reactor2
0 FIC-2005 FIC-2007
1 0.005 0.006
2 0.05 0.06
当然,要完成工作, df1 必须包含尽可能多的行对 作为 df2 中的列数。