return如何为python中某列的最大值对应的multiindex的每一层建立索引
How to return index for each level of a multiindex corresponding to the maximum value of a column in python
我的数据框组由两个索引列(cat1
和 cat2
)定义。对于第三个非索引变量 var
,我想找到索引 cat2
,对于 cat1
的每个值 var
的最大值。
当我使用 idxmax()
时,我得到 cat1
和 cat2
的总索引值对应于 var
的最大值 (B,dog)
。我想要 cat1
.
每个级别的这个值
df = pd.DataFrame({
'cat1': ['A'] * 4 + ['B'] * 4 + ['C'] * 4,
'cat2': ['cat', 'dog', 'mouse', 'bear'] * 3,
'var': [23, 33, 45, 66, 77, 88, 44, 55, 33, 22, 11, 44],
}).set_index(['cat1', 'cat2'])
var
cat1 cat2
A cat 23
dog 33
mouse 45
bear 66
B cat 77
dog 88
mouse 44
bear 55
C cat 33
dog 22
mouse 11
bear 44
这是生成的结果:
想要的结果:
我不关心格式。
df.groupby('cat1').idxmax() # or df.groupby(level=0).idxmax()
# var
# cat1
# A (A, bear)
# B (B, dog)
# C (C, bear)
- 您当前的代码使用
DataFrame.idxmax
,其中 returns global max. 的索引
- 然而你只想要每组最大值的索引,所以使用
groupby.idxmax
.
(如 sammywemmy 所说,以后请将示例数据帧作为可复制粘贴代码而不是图像提供。)
有无数种方法可以创建此代码的输出。我演示了以下 3 种方式:
MaxEachcat1 = df[df['var'] == df.groupby(level=[0])['var'].transform(max)]
print(MaxEachcat1)
print(MaxEachcat1.index)
print(MaxEachcat1.index[0])
输出:
# way 1
var
cat1 cat2
A bear 66
B dog 88
C bear 44
# way 2
MultiIndex([('A', 'bear'),
('B', 'dog'),
('C', 'bear')],
names=['cat1', 'cat2'])
# way 3
('A', 'bear')
我的数据框组由两个索引列(cat1
和 cat2
)定义。对于第三个非索引变量 var
,我想找到索引 cat2
,对于 cat1
的每个值 var
的最大值。
当我使用 idxmax()
时,我得到 cat1
和 cat2
的总索引值对应于 var
的最大值 (B,dog)
。我想要 cat1
.
df = pd.DataFrame({
'cat1': ['A'] * 4 + ['B'] * 4 + ['C'] * 4,
'cat2': ['cat', 'dog', 'mouse', 'bear'] * 3,
'var': [23, 33, 45, 66, 77, 88, 44, 55, 33, 22, 11, 44],
}).set_index(['cat1', 'cat2'])
var
cat1 cat2
A cat 23
dog 33
mouse 45
bear 66
B cat 77
dog 88
mouse 44
bear 55
C cat 33
dog 22
mouse 11
bear 44
这是生成的结果:
想要的结果:
我不关心格式。
df.groupby('cat1').idxmax() # or df.groupby(level=0).idxmax()
# var
# cat1
# A (A, bear)
# B (B, dog)
# C (C, bear)
- 您当前的代码使用
DataFrame.idxmax
,其中 returns global max. 的索引
- 然而你只想要每组最大值的索引,所以使用
groupby.idxmax
.
(如 sammywemmy 所说,以后请将示例数据帧作为可复制粘贴代码而不是图像提供。)
有无数种方法可以创建此代码的输出。我演示了以下 3 种方式:
MaxEachcat1 = df[df['var'] == df.groupby(level=[0])['var'].transform(max)]
print(MaxEachcat1)
print(MaxEachcat1.index)
print(MaxEachcat1.index[0])
输出:
# way 1
var
cat1 cat2
A bear 66
B dog 88
C bear 44
# way 2
MultiIndex([('A', 'bear'),
('B', 'dog'),
('C', 'bear')],
names=['cat1', 'cat2'])
# way 3
('A', 'bear')