Pandas:按值过滤,然后在Multiindex

时间:2017-03-15 11:57:14

标签: pandas sorting filter pandas-groupby multi-index

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

我想返回每个日期最大LETTER A VALUES的列表。

因此,在这种情况下,我希望返回VALUES 38

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

2 个答案:

答案 0 :(得分:1)

您可以先使用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使用get_level_values进行过滤,然后使用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

答案 1 :(得分:0)

所以只获取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()