4

特定の列が別の基準も満たしている場合に、特定の基準を満たす pandas DataFrame 内のすべてのセルを選択しようとしています。

次の DataFrame があるとします。

      A    B    C    D
1/1   0    1    0    1
1/2   2    1    1    1
1/3   3    0    1    0 
1/4   1    0    1    2
1/5   1    0    1    1
1/6   2    0    2    1
1/7   3    5    2    3

列が以前の値よりも大きいデータを何らかの方法で選択したいと思いますD。また、> 1 の場合でもあります。現在使用しようとしている構文は次のとおりです。

matches = df[(df > df.shift(1)) & (df.D > 1)]

ただし、これを行うと、次のエラーが表示されます。

TypeError:ブロック値で[配列([nan、nan、nan、nan]、dtype = object)]を操作できませんでした[オペランドを形状と一緒にブロードキャストできませんでした(2016)(4)]

注: エラーは、実際のコードから直接コピーして貼り付けたものであるため、エラーの説明と形状は、サンプルの DataFrame とは直接関係がありません。

が問題を引き起こしていることはわかっており、df.D > 1列を直接比較することDは有効です(df > df.Dたとえば)。Dvalueと比較しようとするときの構文のどこが間違っています1か?どうすればこれを達成できますか?

4

2 に答える 2

4

これは直接動作するはずですが、pandas にはブロードキャストとオペレーターがありません (0.14 で発生します)。これが回避策です。

In [74]: df
Out[74]: 
     A  B  C  D
1/1  0  1  0  1
1/2  2  1  1  1
1/3  3  0  1  0
1/4  1  0  1  2
1/5  1  0  1  1
1/6  2  0  2  1
1/7  3  5  2  3

これは where 操作であり、基本的にnp.nan条件が False の場所に置かれます

In [78]: x = df[df>df.shift(1)]

In [79]: x
Out[79]: 
      A   B   C   D
1/1 NaN NaN NaN NaN
1/2   2 NaN   1 NaN
1/3   3 NaN NaN NaN
1/4 NaN NaN NaN   2
1/5 NaN NaN NaN NaN
1/6   2 NaN   2 NaN
1/7   3   5 NaN   3

第2条件で選ぶ

In [80]: x[df.D>1]
Out[80]: 
      A   B   C  D
1/4 NaN NaN NaN  2
1/7   3   5 NaN  3
于 2013-10-21T12:43:56.973 に答える
0

問題は、実際には、シフト操作からのブール配列が他の条件付き配列よりも短いことだと思います。インデックス 0 の最初の条件に false を追加すると、2 つの条件を組み合わせることができるようになります。

問題は本当に2番目の条件にあると思いますが、結果を投稿していただけますか

DF.dtypes

nan 配列エラーを考えると int 型ではないようです

于 2013-10-21T00:54:35.917 に答える