python 根据多列上的条件删除DataFrame中的重复行

7lrncoxx  于 2023-02-15  发布在  Python
关注(0)|答案(1)|浏览(122)

我有 Dataframe 如下:
| 身份证|价值|日期|
| - ------|- ------|- ------|
| 零零一|真的|2022年1月1日00:00:00|
| 002|假|2022年3月1日00:00:00|
| 零零三|真的|2022年3月1日00:00:00|
| 零零一|假|2022年1月1日01:30:00|
| 零零一|真的|2022年1月1日01:30:00|
| 002|真的|2022年3月1日00:00:00|
| 零零三|真的|2022年3月1日00时30分|
| 004|假|2022年3月1日00时30分|
| 005|假|2022年1月1日00:00:00|
原始 Dataframe 中有一些重复行,我希望根据以下条件删除重复行:

  • 如果同一日期和同一时间存在重复的ID请选择值为"True"的行(例如,ID = 002)
  • 如果存在具有相同值的重复ID请选择具有最新日期和时间的行(例如,ID == 003)
  • 如果存在重复的ID请选择日期和时间最新的行,并选择值为"True"的行(例如,ID == 001)

预期产出:
| 身份证|价值|日期|
| - ------|- ------|- ------|
| 零零一|真的|2022年1月1日01:30:00|
| 002|真的|2022年3月1日00:00:00|
| 零零三|真的|2022年3月1日00时30分|
| 004|假|2022年3月1日00时30分|
| 005|假|2022年1月1日00:00:00|
有人能建议我如何删除重复的 Dataframe 基于上述条件?
谢谢。

qv7cva1a

qv7cva1a1#

看起来你只需要在删除重复数据之前对 Dataframe 进行排序。

output =    (
              df.sort_values(by=['date','value'], ascending=False)
                .drop_duplicates(subset='id')
                .sort_values(by='id')
)

打印(输出)
产出

id  value                date
4   1   True 2022-01-01 01:30:00
5   2   True 2022-03-01 00:00:00
6   3   True 2022-03-01 00:30:00
7   4  False 2022-03-01 00:30:00
8   5  False 2022-01-01 00:00:00

相关问题