Pandas:按值过滤,然后在 Multiindex 中获取最大值
Posted
技术标签:
【中文标题】Pandas:按值过滤,然后在 Multiindex 中获取最大值【英文标题】:Pandas: filter by value, then get max value in Multiindex 【发布时间】:2017-08-06 03:39:37 【问题描述】:我有一个如下所示的数据集,其中 DATE
和 LETTER
是多索引的。
我想返回每个日期最大 LETTER A VALUES
的列表。
因此,在这种情况下,我希望返回 VALUES 3
和 8
。
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 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
【讨论】:
完美!效果很好。【参考方案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 中获取最大值的主要内容,如果未能解决你的问题,请参考以下文章