我有一个看起来像这样的数据集,其中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
答案 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()