熊猫:在列值重复的列上加入或合并多个数据框

时间:2019-03-09 02:12:34

标签: python pandas

我有三个数据帧,行数超过71K。以下是示例。

df_1 = pd.DataFrame({'Device_ID':[1001,1034,1223,1001],'Col_A':[45,56,78,33]})
df_2 = pd.DataFrame({'Device_ID':[1001,1034,1223,1001,1887],'Col_B':[35,46,78,33,66]})
df_3 = pd.DataFrame({'Device_ID':[1001,1034,1223,1001,1887,1223],'Col_C':[5,14,8,13,16,8]})

修改 按照建议,下面是我想要的输出

df_final
Device_ID      Col_A    Col_B     Col_C
1001           45       35         5
1034           56       46         14
1223           78       78         8
1001           33       33         13
1887           Nan      66         16
1223           NaN      NaN        8

使用pd.merge()df_1.set_index('Device_ID').join([df_2.set_index('Device_ID'),df_3.set_index('Device_ID')],on='Device_ID')时会花费很长时间。原因之一是重复Device_ID的值。

我知道reduce方法,但是我怀疑它可能导致相同的情况。

有没有更好,更有效的方法?

1 个答案:

答案 0 :(得分:2)

要获得所需的结果,可以使用以下方法:

result = pd.concat([df_1.drop('Device_ID', axis=1),df_2.drop('Device_ID',axis=1),df_3],axis=1).set_index('Device_ID')

如果您不想使用Device_ID作为索引,则可以删除代码中的set_index部分。另外,请注意,由于最终数据帧中某些列(Col_A和Col_B)中存在NaN,Pandas会将非缺失值强制转换为浮点数,因为NaN无法存储在整数数组中(除非您拥有Pandas版本) 0.24,在这种情况下,您可以详细了解here)。