python - 操作/复制数据框(熊猫)并仅维护每个月的最后一天
问题描述
我有以下数据框dt
:
date USDBRL
0 2000-01-03 1.8011
1 2000-01-04 1.8337
2 2000-01-05 1.8544
3 2000-01-06 1.8461
4 2000-01-07 1.8281
... ...
5212 2020-10-01 5.6441
5213 2020-10-02 5.6464
5214 2020-10-05 5.6299
5215 2020-10-06 5.5205
5216 2020-10-07 5.6018
我该如何操作这个dt
,或者创建一个新的,只包含每个月最后一天的行?
解决方案
您可以使用dt.to_periods('M')
查找月份,然后duplicated
查找重复的位置,然后使用布尔索引:
months = pd.to_datetime(dt['date']).dt.to_period('M')
out = dt.loc[months.duplicated(keep='last')]
另一种方法是groupby().idxmax()
. 如果您的数据未按以下方式排序,这会慢一些但更安全date
:
out = df.loc[df.groupby(months)['date'].idxmax()]