我有两个共享一个公共列名的pandas dataFrames。我想合并公共列名称,但保留第二个dataFrame中所有不同的列,其中第二个dataFrame的公共列名称匹配。这是两个dataFrames的示例:
DF1:
A B C D E F G H
value value value value value value value value
value value value value value value value value
value value value value value value value value
etc.
DF2:
A I J K L
value value value value value
value value value value value
value value value value value
我希望预期的结果是:
Result:
A B C D E F G H I J K L
value value value value value value value value value value value value
value value value value value value value value value value value value
value value value value value value value value value value value value
也就是说,在“ A”列上存在匹配项的地方,我希望保留I,J,K,L的行,但不等于“ NaN”,这与DF1中的列类似。
我已经尝试了所有的pd.merge选项,但它们似乎并没有按照我在上面的要求进行操作。例如,
pd.merge(DF1, DF2, on='A', how='left')
与'A'匹配,并将所有键保留在左侧,但不保留在第二个dataFrame中。我知道这是应该执行的操作,但这不是我想要的。同样,how ='right'的功能相同,但是保留了右侧的所有键,并用'NaNs'填充了左侧的所有键。 “外部”似乎也没有做我想要的事情,因为它只是将所有内容粘在一起,并用NaN填充所有非相似列。
此外,请注意DF1和DF2的索引顺序不同。
有人可以在这里为我提供前进的道路吗?谢谢!
答案 0 :(得分:1)
如果有
z=io.StringIO(""" A B C D E F G H
value2 value2 value2 value2 value2 value2 value2 value2
value3 value3 value3 value3 value3 value3 value3 value3
value value value value value value value value""")
df = pd.read_table(z, delim_whitespace=True)
z2=io.StringIO(""" A I J K L
value value value value value
value2 value2 value2 value2 value2
value3 value3 value3 value3 value3""")
df2=pd.read_table(z2,delim_whitespace=True)
然后
pd.merge(df,df2, on="A",right_index=True, left_index=True)
A B C D E F G H I J K L
0 value value value value value value value value value value value value
1 value value value value value value value value value value value value
2 value value value value value value value value value value value value
要匹配您所描述的索引,
pd.merge(df.set_index("A"),df2.set_index("A"), right_index=True, left_index=True).reset_index()
A B C D E F G H I J K L
0 value2 value2 value2 value2 value2 value2 value2 value2 value2 value2 value2 value2
1 value3 value3 value3 value3 value3 value3 value3 value3 value3 value3 value3 value3
2 value value value value value value value value value value value value