如果我连接两个相同索引和列的数据帧,然后连接另一个数据帧,则第三个数据帧不会应用后缀:
In [2]: alpha = pd.DataFrame(np.random.rand(3,3), columns=['A', 'B', 'C'])
In [3]: beta = pd.DataFrame(np.random.rand(3,3), columns=['A', 'B', 'C'])
In [4]: gamma = pd.DataFrame(np.random.rand(3,3), columns=['A', 'B', 'C'])
In [5]: alpha
Out[5]:
A B C
0 0.611635 0.488644 0.970255
1 0.005383 0.745394 0.441660
2 0.610877 0.025026 0.022215
In [6]: alpha.join(beta, lsuffix='alpha', rsuffix='beta').join(gamma, rsuffix='gamma')
Out[6]:
Aalpha Balpha Calpha Abeta Bbeta Cbeta A B C
0 0.611635 0.488644 0.970255 0.786817 0.083497 0.556911 0.994140 0.888822 0.615019
1 0.005383 0.745394 0.441660 0.089104 0.691462 0.310700 0.874293 0.694679 0.420962
2 0.610877 0.025026 0.022215 0.365142 0.289855 0.345496 0.492745 0.651312 0.355848
In [7]: gamma.join(alpha.join(beta, lsuffix='alpha', rsuffix='beta'), lsuffix='gamma')
Out[7]:
A B C Aalpha Balpha Calpha Abeta Bbeta Cbeta
0 0.994140 0.888822 0.615019 0.611635 0.488644 0.970255 0.786817 0.083497 0.556911
1 0.874293 0.694679 0.420962 0.005383 0.745394 0.441660 0.089104 0.691462 0.310700
2 0.492745 0.651312 0.355848 0.610877 0.025026 0.022215 0.365142 0.289855 0.345496
A、B 和 C 列应该是 Agamma、Bgamma 和 Cgamma,但无论它们是连接的左侧还是右侧,都不会应用列标签。
凭直觉,我尝试将 .copy()
添加到连接命令中的数据帧中。似乎没有任何变化有帮助:
In [8]: gamma.copy().join(alpha.copy().join(beta.copy(), lsuffix='alpha', rsuffix='beta'), lsuffix='gamma')
Out[8]:
A B C Aalpha Balpha Calpha Abeta Bbeta Cbeta
0 0.994140 0.888822 0.615019 0.611635 0.488644 0.970255 0.786817 0.083497 0.556911
1 0.874293 0.694679 0.420962 0.005383 0.745394 0.441660 0.089104 0.691462 0.310700
2 0.492745 0.651312 0.355848 0.610877 0.025026 0.022215 0.365142 0.289855 0.345496
我做错了什么吗?
最佳答案
是的,我做错了什么。正如文档中所述,lsuffix
和 rsuffix
仅适用于重叠列。
关于python - 为什么没有应用 pandas join-on-join 后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106034/