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

时间:2015-03-26 10:35:44

标签: python list pandas max min

将此数据框设为'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] ]

4 个答案:

答案 0 :(得分:5)

您可以定义一个函数并调用apply传递函数名称,这将创建一个df,其中min和max作为索引名称:

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

如果您坚持列表列表,我们可以转置df并将值转换为列表:

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

答案 1 :(得分:2)

>>> df = pd.DataFrame([[0, 5], [-5, 2], [3, -7]])
>>> list = [ [min, max] for min, max in zip(df.min(), df.max()) ]
>>> list
[[-5, 3], [-7, 5]]

其他说明:您可能会发现DataFrame.describe方法有用:http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.describe.html

答案 2 :(得分:0)

在编写了可接受的答案后,Pandas introduced使用了用于数据帧的agg方法,这使此操作变得更加容易:

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

仅此而已。如果需要,可以按照接受的答案中的说明将其转换为列表。另外,它也可以与groupby一起使用(不适用于apply):

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

答案 3 :(得分:-1)

应该使用 [np.min, np.max],而不是 [min, max]

df.groupby(by='col1').agg([np.min, np.max])