我需要使用Pandas合并两个.xlsx文件。数据框格式如下: 数据框1:
+-------+-------+-------+-------+-------+
| Index | Col_A | Col_B | Col_C | Col_Q |
+-------+-------+-------+-------+-------+
| 1 | A1 | B1 | C1 | Q1 |
| 2 | A2 | B2 | C2 | Q2 |
| 3 | A3 | B3 | C3 | Q3 |
| ... | ... | ... | ... | ... |
| 100 | A100 | B100 | C100 | Q100 |
+-------+-------+-------+-------+-------+
数据框2:
+-------+--------+--------+--------+
| Index | Col_X | Col_Y | Col_Z |
+-------+--------+--------+--------+
| 1 | XData1 | YData1 | Part 1 |
| 2 | XData2 | YData2 | Part 2 |
| 3 | XData3 | YData3 | Part 3 |
| ... | ... | ... | ... |
| N | XDataN | YDataN | Part N |
+-------+--------+--------+--------+
数据帧2中的Col_Z是唯一的部件号,N是小于100的值。此部件号将与DF1的Col_A,Col_B或Col_C中的一个且仅一个值匹配。如果部件号与其中一个值匹配,我想将数据帧2的该行中的所有数据合并到数据帧1的右侧。最终表应如下所示: 数据框3:
+-------+-------+-------+-------+-------+-------+--------+--------+--------+
| Index | Col_A | Col_B | Col_C | Col_Q | Index | Col_A | Col_B | Col_Z |
+-------+-------+-------+-------+-------+-------+--------+--------+--------+
| 1 | A1 | B1 | C1 | Q1 | X | XDataX | YDataX | Part X |
| 2 | A2 | B2 | C2 | Q2 | Y | XDataY | YDataY | Part Y |
| 3 | A3 | B3 | C3 | Q3 | Z | XDataZ | YDataZ | Part Z |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 100 | A100 | B100 | C100 | Q100 | N | XDataN | YDataN | Part N |
+-------+-------+-------+-------+-------+-------+--------+--------+--------+
我想保持DF1和DF2的索引重新排列,以便Col_Z与Col_A,Col_B或Col_C匹配。 我尝试的是三个单独的合并命令,其中left_on分别是Col_A,Col_B和Col_C。在所有三种情况下,属性right_on都是Col_Z。这将为Col_A,Col_B和Col_C与部件号匹配的实例提供三个新数据框。当我尝试合并这些数据帧以创建具有所有信息的最终数据帧时,我会遇到诸如数据向右移动等问题。关于解决方案的任何想法?
答案 0 :(得分:0)
如果您已创建合并的数据框,例如:
dfa = df1.merge(df2, left_on = 'Col_A', right_on = 'Col_Z', how = 'left')
请注意how = 'left'
保留df1
的所有数据。对于Col_B和Col_C也有同样的想法,那么你可以这样做:
df_output = dfa.fillna(dfb).fillna(dfc)
您将nan
中的dfa
填充dfb
然后dfc
的值,如果它们存在且不是nan
。