np.where 사용할 수 있습니다 . 경우 cond
부울 배열하고, A
그리고 B
다음, 배열 인
C = np.where(cond, A, B)
C가 A
어디가 cond
True이고 B
어디가 cond
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']
언제 df['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
무엇입니까?