【发布时间】:2018-11-24 09:32:48
【问题描述】:
我有一个数据框df1,它需要附加一个新列'h[mm]'。新'h[mm]' 中的值应在df2 中查找,具体取决于df1 的'Profile' 列中的值。这种情况可以与 Excel 的“vlookup”或“index/match”进行比较。
我已成功将具有正确值的新列'h[mm]' 添加到df1。但是,它改变了原始 df1 的顺序,这在我的情况下是不需要的。
数据帧df1 和df2 的简化可重现版本是:
pile_type = ['P01', 'P20', 'P05', 'P23', 'P04', 'P01']
profile = ['HE200A', 'HE220A', 'HE240B', 'NaN', 'HE200A', 'HE300B']
df1 = pd.DataFrame({'Pile_type': pile_type, 'Profile': profile})
profile_database = ['HE200A', 'HE220A', 'HE240B', 'HE500B', 'HE300B']
profile_height_database = [190, 210, 240, 500, 300]
df2 = pd.DataFrame({'Profile': profile_database, 'h[mm]': profile_height_database})
我最接近解决方案的是使用pd.merge_ordered():
df_mo= pd.merge_ordered(df1, df2, left_by='Profile')
在生成的df_mo 中仍然没有保留df1 的原始顺序:
print('df1:', df1)
print('df2:', df2)
print('df_mo:', df_mo)
df1: Pile_type Profile
0 P01 HE200A
1 P20 HE220A
2 P05 HE240B
3 P23 NaN
4 P04 HE200A
5 P01 HE300B
df2: Profile h[mm]
0 HE200A 190
1 HE220A 210
2 HE240B 240
3 HE500B 500
4 HE300B 300
df_mo: Pile_type Profile h[mm]
0 P01 HE200A 190.0
1 P04 HE200A 190.0
2 P20 HE220A 210.0
3 P05 HE240B 240.0
4 P23 NaN NaN
5 P01 HE300B 300.0
我也尝试了标准的pd.merge(),但没有运气。
【问题讨论】:
标签: python python-3.x pandas dataframe merge