首页 > 解决方案 > 如何为熊猫数据框中的多索引中的列选择最大值?

问题描述

我正在尝试为每次试验选择最高的“t”,但我正在努力寻找一种方法来调用“t”,因为它在索引中。我已经尝试过 df_paths['t'] 和类似的东西,但我不断收到 keyerror: 't'。

数据框看起来像这样(用户、试用和 t 是多索引):

                  x    y
user trial t            
1    1     0.0  0.1  0.2
           1.2  0.3  0.5
     2     0.0  0.1  0.2    
           1.0  0.2  0.3
2    1     2.5  0.3  0.2
     2     0.0  0.0  0.0

理想情况下,我希望将输出作为列表 [1.2 ,1.0, 2.5, 0.0] 以便我可以计算有多少值大于 1 并将其存储在变量中。

标签: pythonpandas

解决方案


DataFrame.sort_index与 一起使用GroupBy.head

df1 = (df.sort_index(level=['trial','t'], ascending=False)
         .groupby(['user','trial'])
         .head(1)
         .sort_index())
print (df1)
                  x    y
user trial t            
1    1     1.2  0.1  0.2
     2     1.0  0.2  0.3
2    1     2.5  0.3  0.2
     2     0.0  0.0  0.0

编辑:对于t索引使用中的值Index.get_level_values,最后转换为list

t = df1.index.get_level_values('t')
print (t)
Float64Index([1.2, 1.0, 2.5, 0.0], dtype='float64', name='t')

L = t.tolist()
print (L)
[1.2, 1.0, 2.5, 0.0]

使用索引可以按以下方式计数Index.value_counts

print (t.value_counts())
0.0    1
1.2    1
2.5    1
1.0    1
Name: t, dtype: int64

推荐阅读