我想合并看起来像下面的数据(有许多不同的文件也持有bar
数据)。有许多不同的数据框,设置如下。
id bar baz
1 10 15
2 12 69
id bar baz
3 96 75
id bar baz
4 45 76
5 75 23
id foo bah
1 0.1 81
2 0.2 59
3 0.1 89
4 0.1 642
5 0.2 51
我想将所有内容合并到一个包含id
,foo
,bah
,bar
和baz
列的文件中。我尝试在for循环中重复调用df = pd.merge(df, t_df, how='outer', on=key_trans[key])
,但这不起作用,而是为每个原始变量生成列bar_x
,bar_y
等。
上面的注意事项:key_trans
是一个提供需要保留的数据的密钥,例如id
(以及我在提出问题时简化过的其他类型的ID)。
答案 0 :(得分:0)
请考虑以下df
:
bar_x bar_y bar_z foo id
0 10.0 NaN NaN 0.1 1
1 12.0 NaN NaN 0.2 2
2 64.0 NaN NaN 0.1 3
3 NaN NaN 10.0 0.1 4
4 NaN 12.0 NaN 0.2 5
使用:
df.set_index(['foo', 'id']).sum(axis=1).reset_index().rename(columns={0:'bar'})
输出:
foo id bar
0 0.1 1 10.0
1 0.2 2 12.0
2 0.1 3 64.0
3 0.1 4 10.0
4 0.2 5 12.0
通过编辑问题,我想到了以下解决方案:
df.merge(pd.concat([df1, df2, df3], ignore_index=True))
id foo bar
0 1 0.1 10
1 2 0.2 12
2 3 0.1 96
3 4 0.1 45
4 5 0.2 75