我想串联在三个数据框中不同的列。数据框具有列ID,并且某些列相同:例如。
df1
id place name qty unit A 1 NY Tom 2 10 a 2 TK Ron 3 15 a 3 Lon Don 5 90 a 4 Hk Sam 4 49 a
df2
id place name qty unit B 1 NY Tom 2 10 b 2 TK Ron 3 15 b 3 Lon Don 5 90 b 4 Hk Sam 4 49 b
df3
id place name qty unit C D 1 NY Tom 2 10 c d 2 TK Ron 3 15 c d 3 Lon Don 5 90 c d 4 Hk Sam 4 49 c d
结果:
id place name qty unit A B C D 1 NY Tom 2 10 a b c d 2 TK Ron 3 15 a b c d 3 Lon Don 5 90 a b c d 4 Hk Sam 4 49 a b c d
列的位置,名称,数量和单位将始终是三个数据框的一部分,不同的列的名称可能会有所不同(在我的示例中为A,B,C,D)。这三个数据帧具有相同的行数。
我试过了:
cols_to_use = df1.columns - df2.columns dfNew = merge(df, df2[cols_to_use], left_index=True, right_index=True, how='outer')
问题是我得到的行比预期的多,并且在结果数据框中重命名了列(使用concat时)。
reduce从使用functools
reduce
functools
from functools import reduce reduce(lambda left,right: pd.merge(left,right), [df1,df2,df3]) Out[725]: id place name qty unit A B C D 0 1 NY Tom 2 10 a b c d 1 2 TK Ron 3 15 a b c d 2 3 Lon Don 5 90 a b c d 3 4 Hk Sam 4 49 a b c d