使用不同的时间python删除基于相同名称和相同日期的行



我有这样的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

groupbyfirst的较短版本(假设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

最新更新