我有这样的pandas
数据帧:
name date
john 2021-01-19 06:30:29
tom 2021-03-21 19:30:01
tom 2021-03-21 22:02:34
sam 2021-02-14 13:13:21
sam 2021-02-16 10:15:55
kim 2021-04-01 15:10:44
sam 2021-01-23 13:13:21
sam 2021-02-16 17:11:12
有没有任何方法可以删除基于相同名称和相同日期(甚至不同时间(的行?保留第一个/最后一个没关系。所以输出会像这样:
name date
john 2021-01-19 06:30:29
tom 2021-03-21 19:30:01
sam 2021-02-14 13:13:21
sam 2021-02-16 10:15:55
kim 2021-04-01 15:10:44
sam 2021-01-23 13:13:21
groupby
和first
的较短版本(假设df['date']
已经是日期时间(:
df.groupby(['name', df['date'].dt.date], as_index=False).first()
输出:
name date
0 john 2021-01-19 06:30:29
1 kim 2021-04-01 15:10:44
2 sam 2021-01-23 13:13:21
3 sam 2021-02-14 13:13:21
4 sam 2021-02-16 10:15:55
5 tom 2021-03-21 19:30:01
您可以创建一个只包含日期的新列,并使用drop_duplicates((删除具有相同日期的行,名称为
df['date'] = pd.to_datetime(df['date'])
df['dateOnly'] = df['date'].dt.date
df.drop_duplicates(subset=['name', 'dateOnly'], inplace=True)
df.drop(['dateOnly'], axis=1, inplace=True)
样本数据帧
df = pd.DataFrame(
[
['john' , '2021-01-19 06:30:29'],
['tom' , '2021-03-21 19:30:01'],
['tom' , '2021-03-21 22:02:34'],
['sam' , '2021-02-14 13:13:21'],
['sam' , '2021-02-16 10:15:55'],
], columns=['name', 'date'])
输出:
name date
0 john 2021-01-19 06:30:29
1 tom 2021-03-21 19:30:01
3 sam 2021-02-14 13:13:21
4 sam 2021-02-16 10:15:55