操作/复制数据框(熊猫),并仅维护每月的最后一天

时间:2020-10-07 17:06:59

标签: python pandas

我有以下数据框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或创建一个仅包含每月最后一天的行?

2 个答案:

答案 0 :(得分:2)

您可以使用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()]

答案 1 :(得分:0)

您可以使用pd.date_range创建日期范围列表。这是另一种方式

required_datelist = pd.date_range(start='1/1/2018', periods=12, freq='M')
output = dt[dt.date.isin(required_datelist)]