一个DataFrame每列的最大值和最小值

5
给定数据框“x”:
    col1 col2 col3 col4
    0     5   -2    1 
   -5     2   -1    9
    3    -7    3    5

我如何获取每一列的最小值和最大值对呢?结果应该是:

list = [ [-5 , 3], [-7 , 5], [-2 , 3], [1 , 9] ]
3个回答

20

您可以定义一个函数并调用 apply,将函数名称作为参数传递,这将创建一个以最小值和最大值为索引名称的数据框:

您可以定义一个函数并调用apply,将函数名称作为参数传递,这将创建一个以最小值和最大值为索引名称的数据框:

In [203]:

def minMax(x):
    return pd.Series(index=['min','max'],data=[x.min(),x.max()])


df.apply(minMax)
Out[203]:
     col1  col2  col3  col4
min    -5    -7    -2     1
max     3     5     3     9

如果您坚持要一个嵌套列表,我们可以转置数据框并将值转换为列表:

In [206]:

def minMax(x):
    return pd.Series(index=['min','max'],data=[x.min(),x.max()])


df.apply(minMax).T.values.tolist()
Out[206]:
[[-5, 3], [-7, 5], [-2, 3], [1, 9]]

这个函数本身并不是完全必要的,因为你可以使用 Lambda 表达式代替:

In [209]:

df.apply(lambda x: pd.Series([x.min(), x.max()])).T.values.tolist()
Out[209]:
[[-5, 3], [-7, 5], [-2, 3], [1, 9]]

请注意,您也可以使用describeloc来获取您想要的内容:

In [212]:

df.describe().loc[['min','max']]
Out[212]:
     col1  col2  col3  col4
min    -5    -7    -2     1
max     3     5     3     9

17

Pandas 引入了数据框的agg方法,使这个过程更加容易:

df.agg([min, max])
Out[207]: 
     col1  col2  col3  col4
min    -5    -7    -2     1
max     3    49     6     9

就这些了。如果需要,可以按照被接受的答案中所述将其转换为列表。作为额外奖励,这也可以与groupby一起使用(而apply方法则无法很好地处理groupby):

df.groupby(by='col1').agg([min, max])
Out[208]: 
     col2     col3     col4    
      min max  min max  min max
col1                           
-5      2   2   -1  -1    9   9
 0      5  49   -2   6    1   6
 3     -7  -7    3   3    5   5

最好的方式。谢谢! - falselight

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接