python - 如何从数据框中获取每个月的最后一天并从数据框中删除其余日期?
问题描述
大家好,该图像是我正在学习python的数据框。
从这个数据框中,我试图找到每年 12 月最后一天的行记录。我的目标是在数据框中以黄色突出显示记录并删除白色行。
例如,对于 2010 年,我只想保留第 3 条记录并删除第 1 到第 2 行。至于 2011 年,我想删除第 4 到第 7 行并保留第 8 行。
下面是我写的代码。我打算使用循环来查找我想要保留的记录并删除其余的记录。
为了使用月份值保留记录,我设法通过保留 12 月并删除 1 月到 11 月的记录来实现我的目标
但是,对于几天(最后 3 行代码),我意识到最后一天并不总是以数据框中的 31 结束,我无法使用我的初始逻辑来删除。
如果有更好的解决方案可以在数据框中找到该月的最后一天并删除其余日期,我可以寻求帮助吗?
谢谢
amalgamate=pd.read_excel("amalgamate.xlsx")
##Create last 3 columns to segregate Year, Month and Day.
amalgamate["Date"] = pd.to_datetime(amalgamate["Date"], errors = "raise", format = "%Y-%m-%d")
amalgamate["Year"]=amalgamate["Date"].dt.year
amalgamate["Month"]=amalgamate["Date"].dt.month
amalgamate["Day"]=amalgamate["Date"].dt.day
listofMonth=amalgamate.Month.unique()
listofDay=amalgamate.Day.unique()
#Loop through the records and remove records that are not Dec for each year
for eachmonth in listofMonth:
if eachmonth !=12:
amalgamate=amalgamate[amalgamate.Month != eachmonth]
#Loop through the records and remove records that are not 31 for each month
for eachday in listofDay:
if eachday !=31:
amalgamate=amalgamate[amalgamate.Day != eachday]
解决方案
这是一个 oneliner,它将通过设置为一个月进行分组来过滤月份的最后几天Date
,pd.Grouper
然后从每个组中获取最后一行:
df.loc[df.groupby(pd.Grouper(key='Date', freq='1M')).Date.idxmax()]
推荐阅读
- android - 如何在多个模块中使用 Koin?
- javascript - Maximo - 根据 METERDATA 的入站值在 MeterReading 中设置值
- android - 通过 wifi 调试连接到特定 USB 控制器的应用程序
- android - Android Wrap Shell 脚本无法按预期工作
- sqlite - Mono 上带有 SQLite 的 EF Core:找不到 e_sqlite3
- ios - Peek 和 Pop 泄漏 mainWindow.rootViewController
- php - 我正在使用 AES ECB 256 填充 - 加密发送数据,但我无法实现解密
- java - 如何在java中将json文件解析为json对象
- python - 如何使用 Librosa 在 python 中读取音频?
- python - 如何从数据框中获取值?