2017-02-22 10 views
-1

私はPythonを初めて使用しました&パンダ。パンダ - DataFrameのどこでも値のインデックスを見つける

私のパンダのデータフレームに特定の値のインデックスがあります(これはsecurity_idとしましょう)。なぜなら、その列が始まるからです。 (列の上に無関係のデータを含む行数が不明で、左側に空の '列'が多数あります)

これまでのところ、isinメソッドはその値が存在するかどうか、そのインデックスではない。

この値のインデックスはどのようにして見つけられますか?

+1

ようこそStackOverflow。この記事を読むには、[素晴らしいパンダの例を提供する方法](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)と[最小で完全で検証可能な例](http://stackoverflow.com/help/mcve)を提供し、それに応じて質問を修正してください。良い質問をする方法(http://stackoverflow.com/help/how-to-ask)も役立つかもしれません。 – jezrael

答えて

0

あなたDATAFRAMEは、以下のようになっていることを仮定すると:

 0  1   2  3 4 
0  a  er   tfr sdf 34 
1 rt  tyh   fgd thy rer 
2  1  2   3  4 5 
3  6  7   8  9 10 
4 dsf  wew security_id name age 
5 dfs bgbf   121 jason 34 
6 dddp gpot   5754 mike 37 
7 fpoo werwrw   342 jack 31 

は、次の操作を行います:

for row in range(df.shape[0]): # df is the DataFrame 
     for col in range(df.shape[1]): 
      if df.get_value(row,col) == 'security_id': 
       print(row, col) 
       break 
+0

ありがとう、これは解決策のようです:)行と列の両方を反復する値を見つける唯一の方法はありますか?より効率的な方法がありますか? – Kemeia

+0

あなたが何をしていても、反復は常に関与します。あなたがそれをするか、そうでなければパンダがそれをするでしょう。内部的な反復は常に関与します。さらに、反復は一度停止し、IDを取得します。ワーストケースは、security_idがDataFrameの右下の要素(O(mn))である場合です。 security_idがDataFrameの左上半分にある場合は、コストがかかりません。 – Ujjwal

+1

また、データのクリーニングを依頼しています。だから、それは安価な前処理ステップです。すべてをハイパー最適化しようとしないでください。早期最適化はすべての悪の根源です。覚えている。 – Ujjwal

0

この質問は、hereの前に聞かれた可能性があります。受け入れられた答えはかなり包括的で、列内の値のインデックスを見つけるのに役立ちます。

編集: 値が中に存在することカラムが知られていない場合は、あなたが使用できます。

for col in df.columns: 
    df[df[col] == 'security_id'].index.tolist() 
+0

与えられた質問では、列は分かっています。私の場合は、どの列に値が表示されるのかわかりません。しかし、私はそれが私の質問の答えに方向性を与えることに同意する – Kemeia

+0

ああ、謝罪!データフレーム内の列の上をループし、上にリンクされた答えを適用することができます。 'for df.columns: df [df [col] == 'security_id']。index.tolist()'。これはまたあなたが探しているもののすべての出現を与えるでしょう。 –

関連する問題