2016-07-12 10 views
6

このオプションはRやSQLなどの他の言語でも見つかりましたが、私はPandasでどうやってこれをどうやって行くのかはわかりません。パンダのデータフレームの特定の値の列名を返します

私は1262列と1行のファイルを持っており、特定の値が現れるたびに戻るように列ヘッダーが必要です。

セイ例えば、このテストデータフレーム:

Date    col1 col2 col3 col4 col5 col6 col7 
01/01/2016 00:00 37.04 36.57 35.77 37.56 36.79 35.90 38.15 

そして、私は、例えばのために列名を検索する必要がありますここで、値は38.15です。そうする最善の方法は何ですか?

おかげであなたは1行だけ持っているとして、あなたは結果にiloc[0]を呼び出すと列マスクするために、これを使用することができます見て

答えて

7

In [48]: 
df == 38.15 

Out[48]: 
      Date col1 col2 col3 col4 col5 col6 col7 
01/01/2016 False False False False False False False True 

In [49]: 
(df == 38.15).iloc[0] 

Out[49]: 
Date False 
col1 False 
col2 False 
col3 False 
col4 False 
col5 False 
col6 False 
col7  True 
Name: 01/01/2016, dtype: bool 
:上記を破壊

In [47]: 
df.columns[(df == 38.15).iloc[0]] 

Out[47]: 
Index(['col7'], dtype='object') 

idxmaxとパラメータaxis=1を使用することもできます。

In [52]: 
(df == 38.15).idxmax(axis=1)[0] 

Out[52]: 
'col7' 
+0

ありがとうございます!私は3つすべてを試して、彼らは働く。私は第3の解決策、すなわち '(df == 38.15).idxmax(axis = 1)[0]'を好むのですが、それはすぐに列の値を与えるからです –

+0

私は同意します。このように名前はインデックスを示唆していますが、 'axis'パラメータは最大値を見つけるために特別に設計されています – EdChum

2

あなたは、データフレームのスライスを使用して、列名を取得することができます。

df.ix[:,df.loc[0] == 38.15].columns 

が出力:

Index([u'col7'], dtype='object') 
+0

インデックスが必要な場合は高速ですみますが、この場合はカラム名が問題に最も適しています。 –

0

ちょうどリングに少し別の何かを投げるのために:

row = df.iloc[0] 
row.reset_index().set_index(0).loc[38.15] 
関連する問題