Python Pandas:查找dataframe中每个列的最大-最小行

Python Pandas:查找dataframe中每个列的最大-最小行,python,pandas,dataframe,Python,Pandas,Dataframe,我试图找到数据帧中每列的最大-最小行数。我甚至不知道从哪里开始。我认为df.groupby和agg不起作用,因为我需要整行 这是一个示例数据 import pandas as pd df = pd.DataFrame( {'A': array([4, 9, 2, 3, 3, 5, 7, 0, 4, 6]), 'B': array([4, 2, 4, 8, 4, 3, 1, 6, 9, 2]), 'C': array([8, 1, 8, 1, 2, 2, 7, 5, 9, 8]), 'D':

我试图找到数据帧中每列的最大-最小行数。我甚至不知道从哪里开始。我认为
df.groupby
agg
不起作用,因为我需要整行

这是一个示例数据

import pandas as pd
df = pd.DataFrame(
{'A': array([4, 9, 2, 3, 3, 5, 7, 0, 4, 6]),
 'B': array([4, 2, 4, 8, 4, 3, 1, 6, 9, 2]),
 'C': array([8, 1, 8, 1, 2, 2, 7, 5, 9, 8]),
 'D': array([9, 4, 2, 8, 0, 3, 6, 9, 3, 8])}
)
预期结果

        A B C D
1 A max 9 2 1 4
7 A min 0 6 5 9
8 B max 4 9 9 3
6 B min 7 1 7 6
8 C max 4 9 9 3
1 C min 9 2 1 4
0 D max 4 4 8 9
4 D min 3 4 2 0
如果有多行具有相同的最小/最大值,则返回其中任何一行都可以


PS:我希望它保留原始索引。

让我们在
idxmin,idxmax
上尝试
agg
,然后
merge

out=(df.agg(['idxmin','idxmax']).unstack().reset_index(name='idx')
       .merge(df, left_on='idx', right_index=True, how='left')
    )
输出(
idx
是原始索引):


这对我的示例数据有效!如果我有一个多索引,你能告诉我要更改哪个部分吗?在上面的操作之前,请先执行
df=df.reset_index()
。这会将数据转换为范围索引。一旦你有了
输出
,你就可以重置索引。然后它也会在索引上聚合吗?我可以放下那些行吗?
  level_0 level_1  idx  A  B  C  D
0       A  idxmin    7  0  6  5  9
1       A  idxmax    1  9  2  1  4
2       B  idxmin    6  7  1  7  6
3       B  idxmax    8  4  9  9  3
4       C  idxmin    1  9  2  1  4
5       C  idxmax    8  4  9  9  3
6       D  idxmin    4  3  4  2  0
7       D  idxmax    0  4  4  8  9