我有2个大小不同的数据帧,并以有效的方式合并了相关数据:
master_df = pd.DataFrame({'kpi_1': [1,2,3,4]},
index=['dn1_app1_bar.com',
'dn1_app2_bar.com',
'dn2_app1_foo.com',
'dn2_app2_foo.com'])
guard_df = pd.DataFrame({'kpi_2': [1,2],
'kpi_3': [10,20]},
index=['dn1_bar.com', 'dn2_foo.com'])
master_df:
kpi_1
dn1_app1_bar.com 1
dn1_app2_bar.com 2
dn2_app1_foo.com 3
dn2_app2_foo.com 4
guard_df:
kpi_2 kpi_3
dn1_bar.com 1 10
dn2_foo.com 2 20
我想从guard_df
的行中获取值,并以<group>_<name>
“传播”到所有master_df
匹配的行中的值的数据框
<group>_.*_<name>
。
预期结果:
kpi_1 kpi_2 kpi_3
dn1_app1_bar.com 1 1.0 10.0
dn1_app2_bar.com 2 1.0 10.0
dn2_app1_foo.com 3 2.0 20.0
dn2_app2_foo.com 4 2.0 20.0
到目前为止,我管理的是以下基本方法:
def eval_base_dn(dn):
chunks = dn.split('_')
return '_'.join((chunks[0], chunks[2]))
for dn in master_df.index:
for col in guard_df.columns:
master_df.loc[dn, col] = guard_df.loc[eval_base_dn(dn), col]
但是我正在寻找一种更高性能的方式来“广播”值并合并数据帧。
答案 0 :(得分:1)
如果可以使用0.25+大熊猫,请通过array
,将index
传递到on
的{{1}}参数,并进行左连接:
merge
答案 1 :(得分:0)
尝试这个:
"