Pandas:匹配具有不同索引的两个数据帧

2024-06-16 09:45:58 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑两个数据帧:

>>> 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

我想把这两个数据帧连接起来,这样我就能得到结果

^{pr2}$

我试过以下方法:

    >>> 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

我想这是在一个索引一个索引地匹配它们,给我一个nan。我也试过加入X和Y,但没能成功。我认为合并这两个数据帧是可行的,但我不知道如何在列'a'和'y'上适当地合并它们

如有任何提示,我们将不胜感激


Tags: columns数据dataframenpnanpdabcstr
1条回答
网友
1楼 · 发布于 2024-06-16 09:45:58

可以使用mapX中的a替换为Y中的x,否则保留原始值:

X['a'] = X.a.astype(str).map(Y.set_index('y').x).fillna(X.a)

enter image description here


使用merge的另一个选项(我更正了Y中的数据类型,即假设y列是float而不是string):

^{pr2}$

然后对xa列进行合并得到:

mX = X.merge(Y.set_index("y"), left_on="a", right_index=True, how="left")
mX

enter image description here

然后根据您的需要,您可以将a和{}组合在一起,或者让它们保持原样,我认为这实际上更合理:

要合并a列和x列,只需执行以下操作:

mX.assign(a = mX.x.fillna(mX.a)).drop('x', axis=1)

这将产生与第一个选项相同的结果。在

相关问题 更多 >