web-dev-qa-db-ja.com

pandas np.whereを使用した複数の列に基づく複数の条件

pandasデータフレームの2つの条件に依存する点に色を付けようとしています。例:

Col1の値> a(float)およびcol2の値-col3の値<b(float)の場合、col 4の値=文字列、それ以外の場合:他の文字列。

私は今、非常に多くの方法を試しましたが、オンラインで見つけたものはすべて、1つの条件にのみ依存していました。

私のサンプルコードでは常にエラーが発生します。Seriesの真理値があいまいです。 a.empty、a.bool()、a.item()、a.any()またはa.all()を使用します。

これがコードです。成功せずにいくつかのバリエーションを試しました。

df = pd.DataFrame()

df['A'] = range(10)
df['B'] = range(11,21,1)
df['C'] = range(20,10,-1)

borderE = 3.
ex = 0.

#print df

df['color'] = np.where(all([df.A < borderE, df.B - df.C < ex]), 'r', 'b')

ところで、私はそれが言っていることを理解しますが、それをどう処理するかではありません...事前に感謝します!

10
Robert

選択基準は ブールインデックス を使用します:

df['color'] = np.where(((df.A < borderE) & ((df.B - df.C) < ex)), 'r', 'b')

>>> df
   A   B   C color
0  0  11  20     r
1  1  12  19     r
2  2  13  18     r
3  3  14  17     b
4  4  15  16     b
5  5  16  15     b
6  6  17  14     b
7  7  18  13     b
8  8  19  12     b
9  9  20  11     b
16
Alexander

iFを関数にラップして適用します。

def color(row):
    borderE = 3.
    ex = 0.
    if (row.A > borderE) and( row.B - row.C < ex) :
        return "somestring"
    else:
        return "otherstring"

df.loc[:, 'color'] = df.apply(color, axis = 1)

収量:

  A   B   C        color
0  0  11  20  otherstring
1  1  12  19  otherstring
2  2  13  18  otherstring
3  3  14  17  otherstring
4  4  15  16   somestring
5  5  16  15  otherstring
6  6  17  14  otherstring
7  7  18  13  otherstring
8  8  19  12  otherstring
9  9  20  11  otherstring
6
Sam