在 pandas 中根据月份对数据进行分组,然后删除除最新的一个 Python 之外的所有条目

Posted

技术标签:

【中文标题】在 pandas 中根据月份对数据进行分组,然后删除除最新的一个 Python 之外的所有条目【英文标题】:Grouping data based on month-year in pandas and then dropping all entries except the latest one- Python 【发布时间】:2020-09-12 21:52:43 【问题描述】:
 Below is my example dataframe
    Date       Indicator  Value
0   2000-01-30  A          30
1   2000-01-31  A          40
2   2000-03-30  C          50
3   2000-02-27  B          60
4   2000-02-28  B          70
5   2000-03-31  C          90
6   2000-03-28  C          100
7   2001-01-30  A          30
8   2001-01-31  A          40
9   2001-03-30  C          50
10  2001-02-27  B          60
11  2001-02-28  B          70
12   2001-03-31  C          90
13   2001-03-28  C          100


Desired Output
Date        Indicator Value
2000-01-31   A          40
2000-02-28   B          70
2000-03-31   C          90
2001-01-31   A          40
2001-02-28   B          70
2001-03-31   C          90

我想编写一个代码,按特定月份-年份对数据进行分组,然后在该特定月份-年份中保留最新日期的条目并删除其余部分。数据截至2020年

我只能按年获取计数。我无法创建适当的代码来帮助按月-年和指标对数据进行分组并获得正确的结果

【问题讨论】:

50 正确吗?因为最后一个日期时间是2000-03-31,而不是2000-03-30 对不起..我的错..应该是 2000-03-31。你是对的 没问题 ;) 免费编辑问题。 【参考方案1】:

使用Series.dt.to_period 表示月份,按DataFrameGroupBy.idxmax 聚合每个组的最大日期索引,然后传递给DataFrame.loc

df['Date'] = pd.to_datetime(df['Date'])

print (df['Date'].dt.to_period('m'))
0     2000-01
1     2000-01
2     2000-03
3     2000-02
4     2000-02
5     2000-03
6     2000-03
7     2001-01
8     2001-01
9     2001-03
10    2001-02
11    2001-02
12    2001-03
13    2001-03
Name: Date, dtype: period[M]

df = df.loc[df.groupby(df['Date'].dt.to_period('m'))['Date'].idxmax()]
print (df)
         Date Indicator  Value
1  2000-01-31         A     40
4  2000-02-28         B     70
5  2000-03-31         C     90
8  2001-01-31         A     40
11 2001-02-28         B     70
12 2001-03-31         C     90

【讨论】:

上述工作正常。但我在日期列中有多年。我给的只是一个样品。如果您可以帮助确定多年的日期,那就太好了。 @PriteshChoksi - 嗯,有用于多年工作的月份,你不工作吗? @PriteshChoksi - 您可以将此数据添加到问题中吗?因为commnets格式不好 @PriteshChoksi - 您可以通过edit 更改数据以查看不同年份的预期输出吗?谢谢。 它正在工作。我这边有一个小错误。非常感谢

以上是关于在 pandas 中根据月份对数据进行分组,然后删除除最新的一个 Python 之外的所有条目的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 数据框:按两列分组,然后对另一列进行平均

pandas分组与聚合

每月每个类别的分组计数(当前月份与过去几个月的剩余时间)在 pandas 的单独列中

Pandas分组与聚合

python--pandas分组聚合

python:根据条件对时间序列数据进行分组或拆分