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

Posted

技术标签:

【中文标题】Pandas:按值过滤,然后在 Multiindex 中获取最大值【英文标题】:Pandas: filter by value, then get max value in Multiindex 【发布时间】:2017-08-06 03:39:37 【问题描述】:

我有一个如下所示的数据集,其中 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             

【问题讨论】:

【参考方案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 indexingget_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

【讨论】:

完美!效果很好。【参考方案2】:

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

【讨论】:

以上是关于Pandas:按值过滤,然后在 Multiindex 中获取最大值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 按值 1 对列进行分组并按频率排序

如何在熊猫中按值计数对列进行排序

在ngFor中按值过滤项目而不编写管道

如何在 C# 字典中按值索引过滤项目?

使用 NSPredicate 按值过滤 NSDictionary

分组数据帧然后在pandas中过滤的最有效方法