Pandas 多索引数据框 - 从多索引中的一个索引中选择最大值

Posted

技术标签:

【中文标题】Pandas 多索引数据框 - 从多索引中的一个索引中选择最大值【英文标题】:Pandas multiindex dataframe - Selecting max from one index within multiindex 【发布时间】:2017-08-27 01:26:57 【问题描述】:

我有一个数据框,其中包含多个年份和月份索引,如下所示

     |     |Value
Year |Month|  
     |  1  |  3
1992 |  2  |  5
     |  3  |  8
     | ... | ...
1993 |  1  |  2
     | ... | ...

我正在尝试选择每年的最大值并将其放入 DF 中,如下所示:

     | Max
Year |  
1992 |  5
1993 |  2
     | ... 

关于多索引的信息不多,我应该简单地做一个 group by 和 apply 或类似的东西让它更简单吗?

【问题讨论】:

请修正您的示例:1992 年的最大值不可能是 5,因为在 Month=3 中它是 8。您在寻找 max 还是 idxmax(给出最大最大值的月份?) 【参考方案1】:

完全正确:

df.groupby(level=0).apply(max)

在我的示例中DataFrame

0 大写降低 一个 0 0.246490 1 -1.265711 2 -0.477415 3 -0.355812 4 -0.724521 b 0 -0.409198 1 -0.062552 2 -0.731789 3 1.131616 4 0.085248 乙一0 0.193948 1 2.010710 2 0.289300 3 0.305373 4 1.376965 b 0 0.210522 1 1.431279 2 -0.247171 3 0.899074 4 0.639926

结果:

0 帽子 1.131616 B 2.010710

顺便说一句,这就是我创建 DataFrame 的方式:

df = pd.DataFrame(np.random.randn(5,4), columns = l)
df.columns = pd.MultiIndex.from_tuples(df.columns, names=['Caps','Lower'])
df = pd.DataFrame(df.unstack())

【讨论】:

有人知道如何使这个答案末尾的示例数据起作用吗? columns = l 对我提出了一个例外,因为 l 没有定义。我试图推断它可能是什么,但没有运气。【参考方案2】:

更简单的解决方案是仅限max

#bernie's sample data
df = df.max(level=0)
print (df)
             0
Caps          
A     1.131616
B     2.010710

【讨论】:

以上是关于Pandas 多索引数据框 - 从多索引中的一个索引中选择最大值的主要内容,如果未能解决你的问题,请参考以下文章

多索引中的 Pandas 自定义排序行

从隐藏在多索引中的年月创建日期时间

多索引中的标签输出

如何从多索引中提取总年份行和列以在绘图中创建直方图

熊猫列多索引中的缺失值

过滤多索引数据集(python/pandas)