【问题标题】:Python Pandas - Merge Multiple Dataframes [duplicate]Python Pandas - 合并多个数据框 [重复]
【发布时间】:2018-11-01 15:57:31
【问题描述】:

我有两个需要使用 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 与部件号匹配的实例提供三个新数据帧。当我尝试合并这些数据框以创建包含所有信息的最终数据框时,我遇到了诸如数据向右移动之类的问题。关于解决方案的任何想法?

【问题讨论】:

    标签: python excel pandas merge xlsx


    【解决方案1】:

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

    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)
    

    您将在dfa 中的nan 中填充来自dfb 的值,然后是dfc(如果它们存在且不属于nan)。

    【讨论】:

    • 感谢您的快速回复!是的,这正是我想要的。
    猜你喜欢
    • 2017-12-16
    • 2017-01-06
    • 1970-01-01
    • 2020-04-10
    • 2020-11-02
    • 2022-01-27
    • 2018-06-05
    • 2018-05-01
    • 2021-06-25
    相关资源
    最近更新 更多