Pandas:按值过滤,然后取Multiindex中的最大值

Pandas: filter by value, then get max value in Multiindex

我有一个看起来像这样的数据集,其中 DATELETTER 是多索引的。

我想 return 每个日期最多 LETTER A VALUES 的列表。

所以,在这种情况下,我想要 VALUES 38 returned。

                            VALUE                   
DATE      LETTER            
1-2002       A                1                            
             B                7
             A                3  
             B                4                                  
2-2002       A                6                   
             B                2                  
             A                8
             B                5             

您可以先 select 与 xs 并汇总 max:

df = df.xs('A', level=1).groupby(level=0).max().reset_index()
print (df)
     DATE  VALUE
0  1-2002      3
1  2-2002      8

L = df.xs('A', level=1).groupby(level=0)['VALUE'].max().tolist()
print (L)
[3, 8]

旧解决方案:

我认为你首先 boolean indexing with get_level_values for filtering and then groupby 通过第一个和第二个索引并聚合 max:

df = df[df.index.get_level_values('LETTER') == 'A']
df = df.groupby(level=[0,1]).max()
print (df)
               VALUE
DATE   LETTER       
1-2002 A           3
2-2002 A           8

df = df[df.index.get_level_values('LETTER') == 'A']
df = df.groupby(level=[0,1]).max().reset_index()
print (df)
     DATE LETTER  VALUE
0  1-2002      A      3
1  2-2002      A      8

所以只获取 A 的最大值:

df = df.reset_index()
df = df[(df['LETTER'] == 'A')].groupby(['DATE', 'LETTER']).max()

并在列表中获取这些数字:

max_A = df[(df['LETTER'] == 'A')].groupby(['DATE', 'LETTER']).max()['VALUE'].tolist()