2016-08-08 6 views
1

インデックス付きでないPandasデータフレームがあり、各行は数値とブール値で構成され、いくつかのNaNがあります。私のデータフレームの例の行は、(上記の変数で)次のようになります。データフレーム内の加算ブール値

X_1 X_2 X_3 X_4 X_5 X_6 X_7 X_8 X_9 X_10 X_11 X_12 
24.4 True 5.1 False 22.4 55 33.4 True 18.04 False NaN NaN 

私は、各行の真の値の数である、X_13それを呼び出す、私のデータフレームに新しい変数を追加したいと思います。したがって、上記の場合には、私が取得したいと思います:

X_1 X_2 X_3 X_4 X_5 X_6 X_7 X_8 X_9 X_10 X_11 X_12 X_13 
24.4 True 5.1 False 22.4 55 33.4 True 18.04 False NaN NaN 2 

を私はdf[X_13] = df[X_2] + df[X_4] + df[X_8] + df[X_10]を試してみました、行はブールが予想される場所にNaNが含まれていない限り、それは私が欲しいものを私に与えます。これらの行の場合、X_13の値はNaNです。

申し訳ありません - これは不合理に簡単なように感じます。助言がありますか?

答えて

4

ブール列を選択して、合計:あなたはNaNを持っている場合は最初に偽のでいっぱい、

df.select_dtypes(include=['bool']).sum(axis=1) 

df.fillna(False).select_dtypes(include=['bool']).sum(axis=1) 

このデータフレームを考えてみましょう:

df 
Out: 
     a  b c  d 
0 True False 1 True 
1 False True 2 NaN 

df == True (0の場合はTrueを返します。 、c)としても:あなたは合計を取る場合

df == True 
Out: 
     a  b  c  d 
0 True False True True 
1 False True False False 

だから、あなたが代わりに2の3を取得するもう一つの重要な点は、ブール配列cannot contain NaNsということです。あなたはブール配列することができ

df.dtypes 
Out: 
a  bool 
b  bool 
c  int64 
d object 
dtype: object 

False秒で充填することによって:だから、あなたはdtypesをチェックすると、あなたが表示されます

df.fillna(False).dtypes 
Out: 
a  bool 
b  bool 
c int64 
d  bool 
dtype: object 

を今、あなたは安全にブール値の列を選択して合計することができます。

df.fillna(False).select_dtypes(include=['bool']).sum(axis=1) 
Out: 
0 2 
1 1 
dtype: int64 
+0

非常にいいです - 説明するサンプルを追加できますか?たぶんいくつかの値1と組み合わせ論理値TrueとNaNが1つの列に必要です。 +1 – jezrael

+0

@jezrael投稿を更新しました。 – ayhan

関連する問題