2

インデックスがタイムスタンプである複数の列を持つデータ フレームがあり、他の 3 つはフェーズ番号インジケーターで、残りは単なるデータです。私がやろうとしているのは、3 つのインジケーター列が、数字のリストの 1 つで構成される同じフェーズ タイプにあるときを見つけることです。

So my data frame looks like this:
Index                    PhaseA   PhaseB   PhaseC   DataCol
01/07/2013  00:00:00     400      415      425      1.2
01/07/2013  00:01:00     415      420      410      1.2
01/07/2013  00:02:00     415      423      415      1.2
01/07/2013  00:03:00     415      423      420      1.2
01/07/2013  00:04:00     415      423      423      1.2
01/07/2013  00:05:00     415      423      425      1.2

したがって、この単純化されたケースでは、3 つのフェーズ番号すべてが 415、423、427、および 432 の値である場合を探しています。これは、このインスタンスで取得する行が 2 分の行と 4 分の行であることを意味します。

これが発生した日付と時刻を探しているので、他のデータ列を使用してさらに調査できます。さらに、これは私がこれをしなければならない唯一の時間ではない可能性が高いので、興味のある数字と列を変更できるとよいでしょう。

これまでのところ、次のようなコードで動作させることができました:

df[ (df["PhaseA"] == (415))]

and then for multiple ones:

df[(df["PhaseA"] == (415))|(df["PhaseA"] == (420))]

しかし、これはすぐに非常に面倒になり、後で修正するのが難しくなります。

私はPythonとプログラミング全般に比較的慣れていないので、助けていただければ幸いです。

4

1 に答える 1

5
mask = df[['PhaseA','PhaseB','PhaseC']].isin([415,423,427,432]).all(axis=1)
df.ix[mask]

例えば、

In [51]: mask = df[['PhaseA','PhaseB','PhaseC']].isin([415,423,427,432]).all(axis=1)
In [52]: mask 
Out[52]: 
Index
2013-01-07 00:00:00    False
2013-01-07 00:01:00    False
2013-01-07 00:02:00     True
2013-01-07 00:03:00    False
2013-01-07 00:04:00     True
2013-01-07 00:05:00    False
dtype: bool

In [53]: df.ix[mask]

収量

Out[53]: 
                     PhaseA  PhaseB  PhaseC  DataCol
Index                                               
2013-01-07 00:02:00     415     423     415      1.2
2013-01-07 00:04:00     415     423     423      1.2

DataFrame.isinPandas の v0.13 に追加されます。なしでDataFrame.isin作成できますmask

mask = df[['PhaseA','PhaseB','PhaseC']].applymap(set([415,423,427,]).__contains__).all(axis=1)
于 2013-10-04T11:08:12.570 に答える