合并具有不同维度和相关数据的数据框

时间:2019-09-10 08:43:18

标签: python pandas

我有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]

但是我正在寻找一种更高性能的方式来“广播”值并合并数据帧。

2 个答案:

答案 0 :(得分:1)

如果可以使用0.25+大熊猫,请通过array,将index传递到on的{​​{1}}参数,并进行左连接:

merge

答案 1 :(得分:0)

尝试这个:

"