根据日期条件从数据框中删除记录

时间:2020-08-10 16:24:25

标签: python pandas dataframe datetime

我的数据框的列名为date,它包含以下日期:

In [67]: df.date.drop_duplicates()
Out[67]: 
0      2020-02-04
570    2020-02-19
1157   2020-03-03
1791   2020-04-02
2452   2020-04-08
3113   2020-05-05
3777   2020-06-03
4445   2020-07-02
5131   2020-08-04
Name: date, dtype: datetime64[ns]

我只想获取每月数据。从月度数据来看,我想保留这个月的最早时间。所以在这里我想删除日期为2020-02-19和2020-04-08的所有记录。问题是我永远不知道我会收到哪个日期。我本该也可以收到2020-07-22的信息-然后我也想删除日期为2020-07-22的所有记录,因为我已经拥有2020-07-02。

您知道执行此操作的流畅方法吗?我想到了用看起来像这样的方式对值进行排序:

2020-02-04
2020-03-03
2020-04-02
2020-05-05
2020-06-03
2020-07-02
2020-08-04
2020-02-19
2020-04-08

然后,我可以删除日期为第7行之后的日期之一(从1开始计数)的所有记录,因为我始终拥有一个变量,该变量确定我需要多少个数据点。但是我不知道该如何排序。您是否知道其他方法或可以帮助我对日期值进行排序?非常感谢!

2 个答案:

答案 0 :(得分:2)

IIUC,您可以花一个groupby个月,然后获得min

df.groupby(df.date.dt.month).min()

如果'date'超过一年,请按年份和月份分组:

df.groupby([df.date.dt.month,df.date.dt.year]).min()

输出:

           date
           
2    2020-02-04
3    2020-03-03
4    2020-04-02
5    2020-05-05
6    2020-06-03
7    2020-07-02
8    2020-08-04

答案 1 :(得分:1)

即使您的数据超过一年也可以使用:

df.sort_values(by='date').groupby(df.date.dt.year.astype(str)
                                  + df.date.dt.month.astype(str)).first()

输出:

0       idx       date
date                  
20202     0 2020-02-04
20203  1157 2020-03-03
20204  1791 2020-04-02
20205  3113 2020-05-05
20206  3777 2020-06-03
20207  4445 2020-07-02
20208  5131 2020-08-04
相关问题