python - 去重记录(窗口函数熊猫)
问题描述
嗨,我希望删除按取消日期订购的记录,所以我只会对最近的记录感兴趣。
样本数据
ID | 取消日期 | type_of_fruit |
---|---|---|
1 | 2021-03-02 | 苹果 |
1 | 2021-01-01 | 苹果 |
2 | 2021-02-01 | 橙 |
预期产出
ID | 取消日期 | type_of_fruit |
---|---|---|
1 | 2021-03-02 | 苹果 |
2 | 2021-02-01 | 橙 |
我写了SQL方式,但我必须在熊猫中实现这个逻辑,请帮忙
SELECT
*
FROM
(SELECT *,
rank() over(partition by id order by cancel_date desc) as rank
FROM df
ORDER BY id, cancel_date DESC) a
where rank = 1
解决方案
这是您如何实现这一目标的方法。
下面的代码会将cancel_date
列转换为datetime
对象,因为您想使用以下命令对其进行排序cancel_date
:
#--if cancel_date is a string, then this code will convert to datetime--
import pandas as pd
df['cancel_date']= pd.to_datetime(df['cancel_date'])
接下来对表进行分组id
(这类似于 中的分区SQL
),然后使用要按顺序cancel_date
排序的列descending
。下面的代码将实现相同的效果:
df["Rank"] = df.groupby("id")["cancel_date"].rank(method="first", ascending= False)
最后,过滤 rank 为 1 的数据:
filtered_df = df[df["Rank"] == 1]
filtered_df.head()
推荐阅读
- mysql - mysql服务器使用500%的cpu
- node.js - 可以托管 NodeJs - http 模块来处理 ASP/.NET 网站页面吗?
- android - 有没有办法为电池制作自定义视图?
- python - 如何创建 Whoosh 自定义权重函数?
- c# - Mac 上的 .NET Core 1.1 应用程序和 SQL Server 连接字符串
- java - Jaxb2Marshaller 用于具有相同类的多个包
- sdk - CPUID SDK 不错的替代品
- datastax - Datastax 图设计推荐
- powershell - PowerShell 脚本 - 区分 3 个命令结果
- drupal - 如何在 drupal 中使用 $link 作为看门狗消息?