2016-05-25 7 views
2

私は、次のしている:パンダで何らかの条件を満たす列インデックスを取得するには?

x = pd.DataFrame({'a':[1,5,5], 'b':[7,0,7]}) 

そして、すべての行について、私はそれが価値だという条件を満たした最初の列のインデックスを取得したいが、いくつかの値よりも大きい、の 4.

よりも大きいとしましょう

この例では、回答は1(1行目の値7のインデックスに対応)と0(2行目の値5のインデックスに対応)と1(インデックス3行目の値5の値)。 答えは[1,0,0]です。

私はそれが法を適用してみました:それは作品

def get_values_from_row(row, th=0.9): 
    """Get a list of column names that meet some condition that their values are larger than a threshold. 

Args: 
    row(pd.DataFrame): a row. 
    th(float): the threshold. 

Returns: 
    string. contains the columns that it's value met the condition. 
""" 
return row[row > th].index.tolist()[0] 

、しかし、私は大規模なデータセットを持って、それはかなり遅いです。 良い選択肢は何ですか?

+0

IIUCは、[1,0,0] ''正しい出力をイマイチ? '7'は' 4'のように高いので – jezrael

+0

それは正しいです。私は更新します。 – avicohen

答えて

2

は、私はあなたがfirst_valid_indexget_locとが必要だと思う:

print (x[x > 4]) 
    a b 
0 NaN 7.0 
1 5.0 NaN 
2 7.0 5.0 

print (x[x > 4].apply(lambda x: x.index.get_loc(x.first_valid_index()), axis=1)) 
0 1 
1 0 
2 0 
dtype: int64 
+0

もっと早く!ありがとう!! – avicohen

関連する問題