如何解决通过调用df2中列出的df1索引来创建数据框
我是Python Pandas的新手,并且在一段时间内一直在解决以下问题。
以下数据帧df1值显示了与应调用的df2值相关的索引
Name1 Name2 ... Name160 Name161
0 62 18 ... NaN 75
1 79 46 ... NaN 5
2 3 26 ... NaN 0
df2包含属于必须调用的索引的值。
Name1 Name2 ... Name160 Name161
0 152.0 204.0 ... NaN 164.0
1 175.0 308.0 ... NaN 571.0
2 252.0 695.0 ... NaN 577.0
3 379.0 722.0 ... NaN 655.0
4 398.0 834.0 ... NaN 675.0
.. ... ... ... ... ...
213 NaN NaN ... NaN NaN
214 NaN NaN ... NaN NaN
215 NaN NaN ... NaN NaN
216 NaN NaN ... NaN NaN
217 NaN NaN ... NaN NaN
例如,df1在“名称161”列中显示值“ 0”。然后df3应该显示df2中列出的索引为0的值。在这种情况下为“ 164”。
到目前为止,我已经看到df3显示了df2的前三个值,但是当然那不是我想要达到的。
Input:
df3 = df1*0
for c in df1.columns:
df3[c]= df2[c]
print(df3)
Output:
Name1 Name2 ... Name160 Name161
0 152.0 204.0 ... NaN 164.0
1 175.0 308.0 ... NaN 571.0
2 252.0 695.0 ... NaN 577.0
任何帮助将不胜感激,谢谢!
解决方法
将DataFrame.stack
与Series.reset_index
一起使用来重塑两个DataFrame的形状,然后通过DataFrame.merge
与左联接合并,最后由DataFrame.pivot
进行透视:
#change index values for match by sample data in df2
print (df1)
Name1 Name2 Name160 Name161
0 2 4 NaN 4
1 0 213 NaN 216
2 3 2 NaN 0
df11 = df1.stack().reset_index(name='idx')
df22 = df2.stack().reset_index(name='val')
df = (df11.merge(df22,left_on=['idx','level_1'],right_on=['level_0',how='left')
.pivot('level_0_x','level_1','val')
.reindex(df1.columns,axis=1)
.rename_axis(None)
)
print (df)
Name1 Name2 Name160 Name161
0 252.0 834.0 NaN 675.0
1 152.0 NaN NaN NaN
2 379.0 695.0 NaN 164.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。