考虑两个数据帧:
>>> X = pd.DataFrame(np.arange(0,12).reshape(4,3),columns=['a','b','c'])
>>> X
a b c
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
>>>
>>> Y = pd.DataFrame(np.array([['abc',22],['fgh',44],['ijk',0],['xee',99],['RGD',3]]),columns = ['x','y'])
>>> Y
x y
0 abc 22
1 fgh 44
2 ijk 0
3 xee 99
4 RGD 3
我想以某种方式加入这两个数据帧,以便得到结果
a b c
0 ijk 1 2
1 RGD 4 5
2 6 7 8
3 9 10 11
我尝试了以下内容:
>>> X.loc[X['a'].astype(str).isin(Y['y']),'a']=Y[Y['y'].astype(str).isin(X['a'])]
>>> X
a b c
0 nan 1 2
1 nan 4 5
2 6.00 7 8
3 9.00 10 11
我认为它正试图通过索引来匹配它们,给我一个楠。我也试过加入X和Y,但是不能让它起作用。我认为合并这两个数据帧是可行的,但我不知道如何将它们合并到列' a'并且' y'适当
此处的任何提示都将非常感谢
答案 0 :(得分:4)
您可以使用map
将a
中的X
替换为x
中的Y
(如果存在),否则保留原始值:
X['a'] = X.a.astype(str).map(Y.set_index('y').x).fillna(X.a)
另一个合并选项,(我更正了Y
中的数据类型,即假设y列是浮点而不是字符串):
X = pd.DataFrame(np.arange(0,12).reshape(4,3),columns=['a','b','c'])
Y = pd.DataFrame([['abc',22],['fgh',44],['ijk',0],['xee',99],['RGD',3]],columns = ['x','y'])
然后x
和a
列上的合并产生:
mX = X.merge(Y.set_index("y"), left_on="a", right_index=True, how="left")
mX
然后取决于您的需要,您可以将列a
和x
组合在一起,或者将它们保留为我认为实际上更合理的列:
要合并a和x列,您可以执行以下操作:
mX.assign(a = mX.x.fillna(mX.a)).drop('x', axis=1)
这与第一个选项的结果相同。