返回在pandas数据帧中出现最小/最大值的索引/索引列表

时间:2016-03-31 12:23:22

标签: python pandas

我想在大熊猫DataFrame中搜索最小值。我需要整个数据帧中的min(跨所有值)类似于df.min().min()。但是,我还需要知道该值出现的位置的索引。

我尝试了很多不同的方法:

  • df.where(df == (df.min().min()))
  • df.where(df == df.min().min()).notnull()source)和
  • val_mask = df == df.min().min(); df[val_mask]source)。

这些返回非最小值/布尔值的NaN数据帧,但我无法找到获取这些位置(行,列)的方法。

是否有一种更优雅的方法来搜索数据帧的最小值/最大值并返回包含事件的所有位置的列表?

import pandas as pd

keys = ['x', 'y', 'z']
vals = [[1,2,-1], [3,5,1], [4,2,3]]
data = dict(zip(keys,vals))
df = pd.DataFrame(data)

list_of_lowest = []

for column_name, column in df.iteritems():
    if len(df[column == df.min().min()]) > 0:
        print(column_name, column.where(column ==df.min().min()).dropna())
        list_of_lowest.append([column_name, column.where(column ==df.min().min()).dropna()])

list_of_lowest
output: [['x', 2   -1.0
Name: x, dtype: float64]]

1 个答案:

答案 0 :(得分:2)

根据您修订的更新:

In [209]:
keys = ['x', 'y', 'z'] 
vals = [[1,2,-1], [3,5,-1], [4,2,3]] 
data = dict(zip(keys,vals)) 
df = pd.DataFrame(data)
df

Out[209]:
   x  y  z
0  1  3  4
1  2  5  2
2 -1 -1  3

然后以下内容将起作用:

In [211]:
df[df==df.min().min()].dropna(axis=1, thresh=1).dropna()

Out[211]:
     x    y
2 -1.0 -1.0

所以这使用df上的布尔掩码:

In [212]:
df[df==df.min().min()]

Out[212]:
     x    y   z
0  NaN  NaN NaN
1  NaN  NaN NaN
2 -1.0 -1.0 NaN

我们使用参数dropna调用thresh=1这会删除至少有一个非NaN值的列:

In [213]:
df[df==df.min().min()].dropna(axis=1, thresh=1)

Out[213]:
     x    y
0  NaN  NaN
1  NaN  NaN
2 -1.0 -1.0

使用thresh=1再次致电可能更安全:

In [214]:
df[df==df.min().min()].dropna(axis=1, thresh=1).dropna(thresh=1)

Out[214]:
     x    y
2 -1.0 -1.0