以后请发布你的代码和数据,而不是图片! 另请参阅此处。
让我首先为您的问题重新创建一个最小的工作数据框。
import pandas as pd
import numpy as np
years = range(2023, 2025)
months = range(1, 4)
days = range(3)
YEAR, MONTH, DAY = "year", "month", "day"
d = {(year, month, day): (np.random.randint(0, 100),)
for year in years for month in months for day in days}
df = pd.DataFrame(
data=d,
columns=pd.MultiIndex.from_tuples(d.keys(), names=(YEAR, MONTH, DAY)
)).T
现在,我获取所有日期的数值,并按年和月的每种组合的最大值进行排序。需要从
pd.Series
到 pd.DataFrame
的“丑陋”转换才能访问正确的 groupby
方法。
maxdays = pd.DataFrame(data=df.index.get_level_values(DAY), index=df.index).groupby(level=(YEAR, MONTH)).apply(max)
最后,我得到相关索引并使用它们对原始数据进行切片。
idxs = maxdays.set_index(maxdays.to_numpy().flatten(), append=True).index
last_day_of_each_month = df.loc[idxs]
print(last_day_of_each_month)