私は私が何をしたいのですがこれは何パンダ - 基準
>>> a_df
state
1 A
2 B
3 A
4 B
5 C
のように見えるのデータフレームを持っているに一致する連続した行のペアを選択するには、特定の順序に一致するすべての連続した行を返すことです。たとえば、このシーケンスが['A', 'B']
の場合、状態がA
で直後にB
の行が戻されます。上記の例では:
>>> cons_criteria(a_df, ['A', 'B'])
state
1 A
2 B
3 A
4 B
または選択した配列は、['A', 'B', 'C']
であれば、出力は
>>> cons_criteria(a_df, ['A', 'B', 'C'])
state
3 A
4 B
5 C
なければならない私は、現在の状態、ならびに次の状態を記憶することによってこれを行うことを決めました。
>>> df2 = a_df.copy()
>>> df2['state_0'] = a_df['state']
>>> df2['state_1'] = a_df['state'].shift(-1)
今、私はstate_0
とstate_1
に関して一致させることができます。しかし、これは最初のエントリだけを返します:
>>> df2[(df2['state_0'] == 'A') & (df2['state_1'] == 'B')]
state
1 A
3 A
ここでロジックを修正して、すべての連続する行が返されるようにしますか?パンダでこれにアプローチするより良い方法はありますか?
これは良いアプローチですが、numpyのために行くと(私はnumpyの中でその熟練していないんだと、私は、私は完全には従わないと思います)読み、それは少し難しいことができます。私が気づいたのは、 '(df2 ['state_0'] == 'A')&(df2 ['state_1'] == 'B')'という行はすべての初期点に対してバイナリ系列を返します。 このシリーズが「真」であるインデックスを得ることができれば、これらの数字に1を加えて次の行を得て、それらの和集合をa_dfから引っ張って、正しい答えを得るでしょう。 バイナリシリーズをインデックスに変換する方法はありますか? – user1496984
@ user1496984はい!代わりに 's.iloc [slc]'を返す代わりに 's.index [slc]'を返します。 – piRSquared
ああ、インデックスが文字列の場合(これは他の答えと同じように)、これは機能しません。代わりに、代わりにSeriesの各True要素の「整数位置」を取得することはできますか?最終的な要素を選択するのに '.iloc'を使わなければならないと思います。 – user1496984