[英]pandas df apply condition on multiple columns
我有一个看起来像这样的df:
pd.DataFrame.from_dict({'master_feature':['ab',float('NaN'),float('NaN')],
'feature':[float('NaN'),float('NaN'),'pq'],
'epic':[float('NaN'),'fg',float('NaN')]})
我想创建一个名为从 master_feature、epic 和 feature 列中promoted
的新列:
promoted
的价值将是:
master_feature
列值不是 null,则master feature
。feature
列的值不是 null,则feature
,对于epic
也是如此就像是:
df.promoted = 'master feature' if not pd.isnull(df.master_feature)
elseif 'feature' if not pd.isnull(df.feature)
elseif 'epic' pd.isnull(df.epic)
else 'Na'
如何使用df.apply
实现这一目标? 如果我使用np.select
会更有效吗?
np.select
是通往 go 的方式。 下面试试。 . . 我想我根据你的问题得到了正确的逻辑。 此外,您的逻辑存在一些差异:“如果相邻特征列值不是 null,并且对于史诗,则特征”与“elseif 'epic' pd.isnull(df.epic)”不同所以我选择了 if df['epic'] is not null then 'epic'
让我知道这是否正确。
cond = [~df['master_feature'].isna(), # if master_feater is not null then 'master feater'
~df['feature'].isna(), # if feature is not null then 'feature
~df['epic'].isna()] # if epic is not null then 'epic'
choice = ['master feature',
'feature',
'epic']
df['promoted'] = np.select(cond, choice, np.nan)
master_feature feature epic promoted
0 ab NaN NaN master feature
1 NaN NaN fg epic
2 NaN pq NaN feature
可以通过apply()
和 numpy argmin argmin()
的组合来完成
df = pd.DataFrame.from_dict({'master_feature':['ab',float('NaN'),float('NaN')],
'feature':[float('NaN'),float('NaN'),'pq'],
'epic':[float('NaN'),'fg',float('NaN')]})
df.assign(promoted=lambda dfa: dfa.apply(lambda r: r[np.argmin(r.isna())], axis=1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.