python - 如何根据一级最大值过滤 MultiIndex 数据帧?

标签 python python-3.x pandas dataframe

我有以下数据框 s:

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          [1, 2, 1, 2, 1, 2, 3, 2,]]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.Series(np.random.randn(8), index=index)

first  second
bar    1        -0.493897
       2        -0.274826
baz    1        -0.337298
       2        -0.564097
foo    1        -1.545826
       2         0.159494
qux    3        -0.876819
       2         0.780388
dtype: float64

我想将其转换为:

first  second
bar    2        -0.274826
baz    2        -0.564097
foo    2         0.159494
qux    3        -0.876819
dtype: float64

通过取每个 firstmax second

我尝试执行 s.groupby(level=1).apply(max),但这会返回:

second
1   -0.337298
2    0.780388
dtype: float64

很明显,我的尝试在 second 中返回每个组的最大值,而不是每个 firstmax second >.

知道怎么做吗?

最佳答案

使用idxmax 和 bool 索引:

s[s.groupby(level=0).idxmax()]

输出:

first  second
bar    2         0.482328
baz    1         0.244788
foo    2         1.310233
qux    2         0.297813
dtype: float64

关于python - 如何根据一级最大值过滤 MultiIndex 数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53839780/

相关文章:

python - 无法在两个类之间建立桥梁

python - 如何使用 pandas 查找一行中的重复单词?

python - 覆盖文件;更改内容但保留文件名

python - 使用 NumPy 和 matplotlib 绘制的图形上未显示某些点

python - 无法在 COALESCE pypher 中设置列​​表类型值

python - 如何在 PyCharm 中显示类型提示?

python - 在 python 中获取更有用的 'logging' 模块错误输出

python - pyopenssl 无法设置 x509 证书 [证书必须是 X509 实例]

pandas - 在 Google Colabs 中何处/如何安全存储 API key ?

python - 如何在 Pandas 中添加 "order within group"列?