np.whereを使用できます。場合cond
ブール配列であり、A
そしてB
その後、アレイであります
C = np.where(cond, A, B)
Cを、A
wherecond
がTrue、B
wherecond
がFalseに等しいと定義します。
import numpy as np
import pandas as pd
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df['que'] = np.where((df['one'] >= df['two']) & (df['one'] <= df['three'])
, df['one'], np.nan)
収量
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
複数の条件がある場合は、代わりにnp.selectを使用できます。たとえば、次の場合df['que']
に等しくdf['two']
したい場合df['one'] < df['two']
は、
conditions = [
(df['one'] >= df['two']) & (df['one'] <= df['three']),
df['one'] < df['two']]
choices = [df['one'], df['two']]
df['que'] = np.select(conditions, choices, default=np.nan)
収量
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN
df['one'] >= df['two']
whendf['one'] < df['two']
がFalseであると想定できる場合、条件と選択は次のように簡略化できます。
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
(NaNが含まれている場合、df['one']
またはdf['two']
含まれている場合、この仮定は正しくない可能性があります。)
ご了承ください
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
文字列値を使用してDataFrameを定義します。それらは数値に見えるので、これらの文字列を浮動小数点数に変換したほうがよい場合があります。
df2 = df.astype(float)
ただし、文字列は文字ごとに比較され、浮動小数点数は数値で比較されるため、これにより結果が変わります。
In [61]: '10' <= '4.2'
Out[61]: True
In [62]: 10 <= 4.2
Out[62]: False
if
ステートメントが次の場合、値はどうなりFalse
ますか?