将lambda行应用于多列熊猫

慕尼

我正在创建一个示例数据框:

tp = pd.DataFrame({'source':['a','s','f'], 
                   'target':['b','n','m'], 
                   'count':[0,8,4]})

并根据与源相同的“目标”列>>的条件创建列“ col”,如果条件匹配,则返回默认值,如下所示:

tp['col'] = tp.apply(lambda row:row['source'] if row['target'] in ['b','n'] else 'x')

但这让我犯了这个错误: KeyError: ('target', 'occurred at index count')

如何在不定义功能的情况下使其工作?

pp

根据@Zero的注释,您需要使用axis=1告诉Pandas您要对每行应用一个函数。默认值为axis=0

tp['col'] = tp.apply(lambda row: row['source'] if row['target'] in ['b', 'n'] else 'x',
                     axis=1)

但是,对于此特定任务,应使用向量化操作。例如,使用numpy.where

tp['col'] = np.where(tp['target'].isin(['b', 'n']), tp['source'], 'x')

pd.Series.isin返回一个布尔系列,该布尔系列告诉numpy.where您选择第二个还是第三个参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章