【问题标题】:Pandas merge 2 dataframesPandas 合并 2 个数据框
【发布时间】:2021-08-23 10:34:51
【问题描述】:

我正在尝试合并 2 个数据帧。

df1
Date        A   B   C 
01.01.2021  1   8   14
02.01.2021  2   9   15
03.01.2021  3   10  16
04.01.2021  4   11  17
05.01.2021  5   12  18
06.01.2021  6   13  19
07.01.2021  7   14  20
df2 
Date         B
07.01.2021  14
08.01.2021  27
09.01.2021  28
10.01.2021  29
11.01.2021  30
12.01.2021  31
13.01.2021  32

两个数据框都有同一行(尽管可能有多个重叠)。 所以我想得到如下所示的df3:

df3 
Date        A   B   C
01.01.2021  1   8   14
02.01.2021  2   9   15
03.01.2021  3   10  16
04.01.2021  4   11  17
05.01.2021  5   12  18
06.01.2021  6   13  19
07.01.2021  7   14  20
08.01.2021  Nan 27  Nan
09.01.2021  Nan 28  Nan
10.01.2021  Nan 29  Nan
11.01.2021  Nan 30  Nan
12.01.2021  Nan 31  Nan
13.01.2021  Nan 32  Nan

我试过了 df3=df1.merge(df2, on='Date', how='outer') 但它提供了额外的 A、B、C 列。你能告诉我如何获得 df3 吗?

非常感谢。

【问题讨论】:

  • 您正在寻找连接或更新。在合并、合并和更新时检查documentation。
  • 你在找df2.update(df1)
  • @Chris 我犯了一个错误。这是关于 concat 但我仍然得到 2 行 07.01.2021 7 14 20in df3

标签: python pandas merge


【解决方案1】:

mergeouter 没有指定on(默认on是两个DataFrames之间的列的交集['Date', 'B']):

df3 = df1.merge(df2, how='outer')

df3:

          Date    A   B     C
0   01.01.2021  1.0   8  14.0
1   02.01.2021  2.0   9  15.0
2   03.01.2021  3.0  10  16.0
3   04.01.2021  4.0  11  17.0
4   05.01.2021  5.0  12  18.0
5   06.01.2021  6.0  13  19.0
6   07.01.2021  7.0  14  20.0
7   08.01.2021  NaN  27   NaN
8   09.01.2021  NaN  28   NaN
9   10.01.2021  NaN  29   NaN
10  11.01.2021  NaN  30   NaN
11  12.01.2021  NaN  31   NaN
12  13.01.2021  NaN  32   NaN

【讨论】:

    【解决方案2】:

    假设您始终希望保留第一个完整版本,您可以将 df2 连接到 df1 的末尾,并在 Date 列中删除重复项。

    pd.concat([df1,df2]).drop_duplicates(subset='Date')
    

    输出

        Date    A   B     C
    0  01.01.2021  1.0   8  14.0
    1  02.01.2021  2.0   9  15.0
    2  03.01.2021  3.0  10  16.0
    3  04.01.2021  4.0  11  17.0
    4  05.01.2021  5.0  12  18.0
    5  06.01.2021  6.0  13  19.0
    6  07.01.2021  7.0  14  20.0
    1  08.01.2021  NaN  27   NaN
    2  09.01.2021  NaN  28   NaN
    3  10.01.2021  NaN  29   NaN
    4  11.01.2021  NaN  30   NaN
    5  12.01.2021  NaN  31   NaN
    6  13.01.2021  NaN  32   NaN
    

    【讨论】:

    • 非常感谢您的帮助
    猜你喜欢
    • 2017-12-07
    • 2015-10-14
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 2015-10-17
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多