Python 合并两个数据帧并删除具有重复索引的重复行(熊猫)

Python 合并两个数据帧并删除具有重复索引的重复行(熊猫),python,pandas,concatenation,Python,Pandas,Concatenation,我读过很多类似问题的帖子,但找不到这个问题。 我有两个数据帧要合并。 它们以时间戳作为索引。 第二个数据帧基本上与第一个数据帧重叠,因此它们共享具有相同时间戳和值的行 我想删除这些行,因为它们共享所有内容:索引和列中的值。 如果它们在列中不共享索引和值,我希望保留它们 到目前为止,我可以指出: Index.drop\u duplicate:这不是我要找的。它不检查列中的值是否相同。我想在列中保留时间戳相同但值不同的行 DataFrame.drop_duplicate:和上面一样,它不检查索引值,

我读过很多类似问题的帖子,但找不到这个问题。 我有两个数据帧要合并。 它们以时间戳作为索引。 第二个数据帧基本上与第一个数据帧重叠,因此它们共享具有相同时间戳和值的行

我想删除这些行,因为它们共享所有内容:索引和列中的值。 如果它们在列中不共享索引和值,我希望保留它们

到目前为止,我可以指出:

Index.drop\u duplicate:这不是我要找的。它不检查列中的值是否相同。我想在列中保留时间戳相同但值不同的行

DataFrame.drop_duplicate:和上面一样,它不检查索引值,如果在列中发现具有相同值但不同索引的行,我希望保留它们

举个例子,我正在重新使用下面答案中给出的数据

df1

df2

我希望得到的结果如下:

                        Value
 2012-02-01 12:00:00     10  #(from df1)
 2012-02-01 12:30:00     10  #(from df1)
 2012-02-01 12:30:00     20  #(from df2 - same index than in df1, but different value)
 2012-02-01 13:00:00     20  #(in df1 & df2, only one kept)
 2012-02-01 13:30:00     30  #(in df1 & df2, only one kept)
 2012-02-02 14:00:00     10  #(from df2)
拜托,有什么想法吗? 谢谢你的帮助!
BEST

假设您有以下两个数据帧:

  • df:

  • df2:

  • 要生成结果,请运行:

    pd.concat([df, df2]).sort_values('Date')\
        .drop_duplicates().reset_index(drop=True)
    
    上述数据的结果为:

                     Date  Value
    0 2012-02-01 12:00:00     10
    1 2012-02-01 12:30:00     10
    2 2012-02-01 12:30:00     21
    3 2012-02-01 12:40:00     22
    4 2012-02-01 13:00:00     20
    5 2012-02-01 13:30:00     30
    6 2012-02-02 14:00:00     10
    7 2012-02-02 14:30:00     10
    8 2012-02-02 15:00:00     20
    9 2012-02-02 15:30:00     30
    
    删除重复的行
    删除重复的行,保留第一行。 由于未通过
    子集
    参数,因此要处理的标准
    重复的两行是所有列的标识。

    假设您有以下两个数据帧:

  • df:

  • df2:

  • 要生成结果,请运行:

    pd.concat([df, df2]).sort_values('Date')\
        .drop_duplicates().reset_index(drop=True)
    
    上述数据的结果为:

                     Date  Value
    0 2012-02-01 12:00:00     10
    1 2012-02-01 12:30:00     10
    2 2012-02-01 12:30:00     21
    3 2012-02-01 12:40:00     22
    4 2012-02-01 13:00:00     20
    5 2012-02-01 13:30:00     30
    6 2012-02-02 14:00:00     10
    7 2012-02-02 14:30:00     10
    8 2012-02-02 15:00:00     20
    9 2012-02-02 15:30:00     30
    
    删除重复的行
    删除重复的行,保留第一行。 由于未通过
    子集
    参数,因此要处理的标准
    两行重复是所有列的标识。

    阅读如何发布一个好问题。您没有示例输入表,也没有希望表在以后看起来像什么的示例。帮我们帮你,你好,谢尔盖,是的,对不起。你是对的,我添加了一个数据示例。阅读如何发布一个好问题。您没有示例输入表,也没有希望表在以后看起来像什么的示例。帮我们帮你,你好,谢尔盖,是的,对不起。你说得对,我添加了一个数据示例。你好,瓦尔迪。谢谢你的回答。在Serge的评论之后,我根据您实际提供的数据添加了一个示例。你的答案与我的意图不符。请问,您认为考虑到我给出的示例,您的方法可以调整吗?现在我看到您希望保留一个重复的行。代码中的差异可以归结为删除keep参数。谢谢你的回答。在Serge的评论之后,我根据您实际提供的数据添加了一个示例。你的答案与我的意图不符。请问,您认为考虑到我给出的示例,您的方法可以调整吗?现在我看到您希望保留一个重复的行。代码中的差异归结为删除了keep参数。
    pd.concat([df, df2]).sort_values('Date')\
        .drop_duplicates().reset_index(drop=True)
    
                     Date  Value
    0 2012-02-01 12:00:00     10
    1 2012-02-01 12:30:00     10
    2 2012-02-01 12:30:00     21
    3 2012-02-01 12:40:00     22
    4 2012-02-01 13:00:00     20
    5 2012-02-01 13:30:00     30
    6 2012-02-02 14:00:00     10
    7 2012-02-02 14:30:00     10
    8 2012-02-02 15:00:00     20
    9 2012-02-02 15:30:00     30