Python Pandas - 合并多个数据帧

Python Pandas - Merge Multiple Dataframes

我有两个 .xlsx 文件需要使用 Pandas 合并。数据帧的格式如下: 数据框 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 的值。此零件编号将与 Col_A、Col_B,或 DF1 的 Col_C。如果部件号与其中一个值匹配,我想将数据帧 2 的那一行中的所有数据合并到数据帧 1 的右侧。最终的 table 应该如下所示: 数据框 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 匹配部件号的实例提供三个新数据框。当我尝试合并这些数据框以创建包含所有信息的最终数据框时,我 运行 遇到诸如数据向右移动等问题。关于解决方案的任何想法?

如果您创建了合并数据框,例如:

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)

您将使用 dfb 中的值填充 dfa 中的 nan,如果它们存在且不存在 nan,则填充 dfc