在 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 之外的所有条目的主要内容,如果未能解决你的问题,请参考以下文章