2016-03-31 16 views
1

最小値はパンダDataFrameを検索したいと思います。 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のデータフレームを非min/boolean値で返しますが、これらの位置の(行、列)を取得する方法を見つけることはできません。

データフレームを最小/最大で検索し、オカレンスのすべての場所を含むリストを返すより洗練された方法がありますか?あなたの改訂更新に基づいて

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

申し訳ありませんが、あなたはこのの出力をオンにした後、次のとおりです。 'df [df == df.max()。max()]。dropna(axis = 1、thresh = 1).dropna() 'をリストに追加しますか? – EdChum

+0

@EdChumはい!ありがとう、これは私が後にしたものです。 thresh = 1引数が何をしているのか説明できますか?私はドキュメントを理解していません "多くの非NA値を必要とする"ということを意味します.. – Bprodz

+0

関連[データフレームの最大値のインデックスを取得する](https://stackoverflow.com/questions/29504938/get-最大値 - データ - フレーム内の行 - 列 - インデックス) – smci

答えて

1

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とPARAM thresh=1これは、少なくとも1非NaN値を持たない列下がる:thresh=1で再び呼び出すことが

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 

おそらく、より安全:

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

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

理想的には、極端な例: '値との関連がある状況では、それが可能であれば理想的です。vals = [[1,2、-1]、[3,5、-1]、[4,2,3]] data = dict(キー= ['x'、 'y'、 ' zip(keys、vals)) df = pd.DataFrame(data) '私はあなたの答えにあなたの答えを好む。ここに追加できますか? – Bprodz

関連する問題