既存のデータフレームの条件に応じて、0または1のいずれかを含む1つの列を持つ新しいデータフレームを作成したいと思います。
df(既存の)データフレームで、列a、b、cの値に同時にゼロが含まれているかどうかを確認したいと思います。その場合は、条件が満たされた場合にゼロを返す1つの列を持つ新しいデータフレームを作成します。それ以外の場合は1を返します。
既存のデータフレームの例:
df = pd.DataFrame({"a":[0,1,0,0],"b":[0,None,0,None],"c":[0,8,0,10],"new_col":[5,5,5,5]})
mylist = ['a','b','c']
if any((df[mylist] == 0).all(1).values):
print('all zeros')
else:
print('contains nonzero')
希望する結果を得るために、printステートメントの代わりに何を配置すればよいかわかりません。
必要なデータフレーム:
df_new = pd.DataFrame({'col':[0,1,0,1]})
前もって感謝します!
チェックの条件を変更する必要があると思いますany
。
df['out'] = (df[mylist] != 0).any(1).astype(int)
print (df)
a b c new_col out
0 0 0.0 0 5 0
1 1 NaN 8 5 1
2 0 0.0 0 5 0
3 0 NaN 10 5 1
新しいDataFrameが必要な場合:
df1 = (df[mylist] != 0).any(1).astype(int).to_frame('col')
print (df1)
col
0 0
1 1
2 0
3 1
「if」ステートメントを使用する必要があります
パンダでは-if-else
から機能を使用しています:numpy
numpy.where
df['out'] = np.where((df[mylist] != 0).any(1), 1, 0)
print (df)
a b c new_col out
0 0 0.0 0 5 0
1 1 NaN 8 5 1
2 0 0.0 0 5 0
3 0 NaN 10 5 1
での解決if-else
も可能ですが、遅いので使用しないでください:
out = []
for x in (df[mylist] == 0).all(1).values:
if np.any(x):
out.append(0)
else:
out.append(1)
df['out'] = out
print (df)
a b c new_col out
0 0 0.0 0 5 0
1 1 NaN 8 5 1
2 0 0.0 0 5 0
3 0 NaN 10 5 1
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加