2017-11-28 16 views
2

特定の日付に関する新しい情報がある場合、データ配列の日付シーケンスと 'x'値が1つの列にあります。Python Pandasインデックス値を選択する列の文字列値を参照する

私はさらに操作のためのデータが

だから私のデータフレームは、このようになっていることを参照することができますので、最新の新しい情報日以前の日付の行のインデックス値を取得したい:

original_df 

index  date  value newinfo 
    0  '2007-12-01'  75  Nan 
    1  '2007-12-02'  75  Nan 
    2  '2007-12-03'  83  x 
    3  '2007-12-04'  83  Nan 
    4  '2007-12-05'  83  Nan 
    5  '2007-12-06'  47  x 
    6  '2007-12-07'  47  Nan 
    7  '2007-12-08'  47  Nan 
    8  '2007-12-09'  47  Nan 

だから私は行を参照することに興味があるoriginal_df.index == 4いくつかの操作のために。

私がそれを行うと考えることができる唯一の方法は、非常に「clunky」です。基本的には、newinfo == 'x'が最後の行のインデックス値を取り、1を減算し、その値を使用してilocを使用して元のデータフレームのその行のさまざまな列にアクセスする行に対してオリジナルのデータをフィルタリングして別のデータフレームを作成します。コードは次のようになります。

interim_df = original_df[original_df['newinfo']=='x'] 
index_ref_value = interim_df.index[-1] - 1 

これは4index_ref_valueを返します。

original_df.iloc[index_ref_value,1] 

言い換えれば、私はnewinfo最新の前に2007-12-05ためvalue、一日にアクセスし、次のよう

私はその後、original_dfvalueにアクセスすることができます。

これは仕事を完了させますが、私を複雑でぎこちなく感じます。私が探しているindex_ref_valueを見つけるには、よりクリーンで、簡単で、よりPythonの方法がありますか?

答えて

3

あなたは1つの文にiloclocを組み合わせることができます。

original_df.iloc[original_df.loc[original_df['newinfo'] == 'x'].index-1] 

loc文は(newinfoxである)ここで、条件のインデックスを取り、その値のインデックスを取得しています。 ilocはこれらのインデックスを取得し、あなたが探している結果を表示します

あなたの質問から、これらの値のリストが必要です。所望の出力を得るためにdf1.iloc[df1.loc[df1['newinfo'] == 'x'].index-1].index.tolist()

編集をしてみてください: `original_df.loc [original_df [ 'newinfo:私はより良い部分を理解して自分のために

original_df.iloc[original_df.loc[original_df['newinfo'] == 'x'].index[-1]-1] 

# added a [0] at the end below to get just the value of `4` 
original_df.iloc[original_df.loc[original_df['newinfo'] == 'x'].index[-1]-1][0] 
+0

それを破壊し、私はあなたの答えの以下のサブセットを走りました'] ==' x '] .index-1'と 'original_df [original_df [' newinfo '] ==' x ']。index-1'(' loc'を持たないことに注意してください)。私は、ここで 'loc'が何をするのかについてはっきりしていません。もう少し説明してください。どうも。 – Windstorm1981

+1

この例の '.loc'は、条件が真であるデータフレームを返します。 '.loc []。* index *'はこの新しいデータフレームのインデックスを返します。これらのインデックスは 'iloc'に渡されるために使用されます – MattR

+0

最新の 'x'日付より前の元のデータフレームのインデックス値を探しているので、あなたの答えは次のように編集する必要があります:' original_df.iloc [ original_df.loc [original_df ['newinfo'] == 'x']。index [-1] -1] '。 (索引の後に '[-1]'を追加することに注意してください)。私はそれを得ましたか? – Windstorm1981

関連する問題