问题
我无法根据其他两列中的值来确定如何创建新的DataFrame列。我需要使用if / elif / else逻辑。但我发现的所有文档和示例只显示if / else逻辑。以下是我想要做的一个示例:
代码
df['combo'] = 'mobile' if (df['mobile'] == 'mobile') elif (df['tablet'] =='tablet') 'tablet' else 'other')
我也愿意使用where()。只是找不到合适的语法。
答案 0 :(得分:31)
我尝试了以下内容,结果更快。希望它对其他人有帮助。
df['combo'] = 'other'
df.loc[df['mobile'] == 'mobile', 'combo'] = 'mobile'
df.loc[df['tablet'] == 'tablet', 'combo'] = 'tablet'
答案 1 :(得分:26)
如果您有多个分支语句,最好创建一个接受行的函数,然后沿axis=1
应用它。这通常比通过行迭代快得多。
def func(row):
if row['mobile'] == 'mobile':
return 'mobile'
elif row['tablet'] =='tablet':
return 'tablet'
else:
return 'other'
df['combo'] = df.apply(func, axis=1)
答案 2 :(得分:4)
ELIF
逻辑可以用np.select
或嵌套的np.where
来实现:
import numpy as np
df['combo'] = np.select([df.mobile == 'mobile', df.tablet == 'tablet'],
['mobile', 'tablet'],
default='other')
# or
df['combo'] = np.where(df.mobile == 'mobile', 'mobile',
np.where(df.tablet == 'tablet', 'tablet', 'other'))
mobile tablet combo
0 mobile bar mobile
1 foo tablet tablet
2 foo nan other
3 mobile tablet mobile
4 mobile nan mobile
5 foo tablet tablet
6 mobile bar mobile
7 mobile tablet mobile
8 mobile bar mobile
9 mobile nan mobile
答案 3 :(得分:0)
添加到np.where解决方案:
df['col1']= np.where(df['col'] < 3, 1,np.where( (df['col'] >3 )& (df['col'] <5),2,3))
总体逻辑是:
np.where(Condition, 'true block','false block').
每个true / false块都可以再次嵌套。
另外,请注意&
的{{1}}