考虑两个数据帧:>>> X = pd.DataFrame(np.arange(0,12).reshape(4,3),columns=['a','b','c'])>>> X a b c0 0 1 21 3 4 52 6 7 83 9 10 11>>>>>> Y = pd.DataFrame(np.array([['abc',22],['fgh',44],['ijk',0],['xee',99],['RGD',3]]),columns = ['x','y'])>>> Y x y0 abc 221 fgh 442 ijk 03 xee 994 RGD 3我想以某种方式连接这两个数据帧,以便得到结果 a b c0 ijk 1 21 RGD 4 52 6 7 83 9 10 11我试过以下方法: >>> X.loc[X['a'].astype(str).isin(Y['y']),'a']=Y[Y['y'].astype(str).isin(X['a'])]>>> X a b c0 nan 1 21 nan 4 52 6.00 7 83 9.00 10 11我想它是想把它们一个索引一个索引地匹配起来,给我一个nan。我也试过加入X和Y,但没能成功。我认为合并这两个数据帧是可行的,但我不知道如何将它们适当地合并到列“a”和“y”上这里的任何建议都将不胜感激 最佳答案 你可以使用map在a中代替X >如果存在,否则保留原始值:X['a'] = X.a.astype(str).map(Y.set_index('y').x).fillna(X.a)另一个带有merge的选项(我在x中更正了数据类型,即假设y列是float而不是string):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'])然后在Y和Y列上合并,得到:mX = X.merge(Y.set_index("y"), left_on="a", right_index=True, how="left")mX然后根据您的需要,您可以将x和a列组合在一起,或者按我认为更合理的方式保留它们:要组合a列和x列,只需执行以下操作:mX.assign(a = mX.x.fillna(mX.a)).drop('x', axis=1)这与第一个选项的结果相同。
07-24 18:27
查看更多