我的数据框的列名为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开始计数)的所有记录,因为我始终拥有一个变量,该变量确定我需要多少个数据点。但是我不知道该如何排序。您是否知道其他方法或可以帮助我对日期值进行排序?非常感谢!
答案 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