多索引数据帧的最后一天

问题描述 投票:0回答:1

拥有 3 个级别(年、月和日)的多索引数据框,我想保留每个月的最后一天,在下面的情况下,2024 年 4 月,只应保留第 4 天

python dataframe multi-index
1个回答
0
投票

以后请发布你的代码和数据,而不是图片! 另请参阅此处

让我首先为您的问题重新创建一个最小的工作数据框。

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)
© www.soinside.com 2019 - 2024. All rights reserved.