Pandas:按值过滤,然后取Multiindex中的最大值
Pandas: filter by value, then get max value in Multiindex
我有一个看起来像这样的数据集,其中 DATE
和 LETTER
是多索引的。
我想 return 每个日期最多 LETTER A VALUES
的列表。
所以,在这种情况下,我想要 VALUES 3
和 8
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()
我有一个看起来像这样的数据集,其中 DATE
和 LETTER
是多索引的。
我想 return 每个日期最多 LETTER A VALUES
的列表。
所以,在这种情况下,我想要 VALUES 3
和 8
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()