Pandas dataframe If else 逻辑与涉及两列
Pandas dataframe If else with logical AND involving two columns
如何在涉及 pandas 数据帧的两列的控制语句中添加逻辑 AND
,即
这个有效:
def getContinent(row):
if row['Location'] in ['US','Canada']:
val = 'North America'
elif row['Location'] in['UK', 'Germany']:
val = 'Europe'
else:
val = None
return val
df.apply(getContinent, axis=1)
现在我想在另一个字段中包含一个附加条件 row['Sales']
:
def getContinent(row):
if row['Location'] in ['US','Canada'] & row['Sales'] >= 100:
val = 'North America'
elif row['Location'] in['UK', 'Germany'] & row['Sales'] < 100:
val = 'Europe'
else:
val = None
return val
df.apply(getContinent, axis=1)
ValueError: ('Arrays were different lengths: 6132 vs 2', u'occurred at index 0')
您需要使用 and
而不是 &
:
df = pd.DataFrame({'Sales': {0: 400, 1: 20, 2: 300},
'Location': {0: 'US', 1: 'UK', 2: 'Slovakia'}})
print (df)
Location Sales
0 US 400
1 UK 20
2 Slovakia 300
def getContinent(row):
if row['Location'] in ['US','Canada'] and row['Sales'] >= 100:
val = 'North America'
elif row['Location'] in['UK', 'Germany'] and row['Sales'] < 100:
val = 'Europe'
else:
val = None
return val
print (df.apply(getContinent, axis=1))
0 North America
1 Europe
2 None
dtype: object
如何在涉及 pandas 数据帧的两列的控制语句中添加逻辑 AND
,即
这个有效:
def getContinent(row):
if row['Location'] in ['US','Canada']:
val = 'North America'
elif row['Location'] in['UK', 'Germany']:
val = 'Europe'
else:
val = None
return val
df.apply(getContinent, axis=1)
现在我想在另一个字段中包含一个附加条件 row['Sales']
:
def getContinent(row):
if row['Location'] in ['US','Canada'] & row['Sales'] >= 100:
val = 'North America'
elif row['Location'] in['UK', 'Germany'] & row['Sales'] < 100:
val = 'Europe'
else:
val = None
return val
df.apply(getContinent, axis=1)
ValueError: ('Arrays were different lengths: 6132 vs 2', u'occurred at index 0')
您需要使用 and
而不是 &
:
df = pd.DataFrame({'Sales': {0: 400, 1: 20, 2: 300},
'Location': {0: 'US', 1: 'UK', 2: 'Slovakia'}})
print (df)
Location Sales
0 US 400
1 UK 20
2 Slovakia 300
def getContinent(row):
if row['Location'] in ['US','Canada'] and row['Sales'] >= 100:
val = 'North America'
elif row['Location'] in['UK', 'Germany'] and row['Sales'] < 100:
val = 'Europe'
else:
val = None
return val
print (df.apply(getContinent, axis=1))
0 North America
1 Europe
2 None
dtype: object