在多列熊猫上应用 lambda 行

Posted

技术标签:

【中文标题】在多列熊猫上应用 lambda 行【英文标题】:applying lambda row on multiple columns pandas 【发布时间】:2018-12-07 09:01:35 【问题描述】:

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

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

并根据'target'列的条件创建'col'列>>与源相同,如果匹配条件,否则为默认值,如下:

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

但它向我抛出了这个错误:KeyError: ('target', 'occurred at index count')

如何在不定义函数的情况下使其工作?

【问题讨论】:

【参考方案1】:

你需要使用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 是选择第二个还是第三个参数。

【讨论】:

以上是关于在多列熊猫上应用 lambda 行的主要内容,如果未能解决你的问题,请参考以下文章

根据熊猫中多列中的值从数据框中选择行

根据熊猫中多列中的值从数据框中选择行

根据熊猫中多列中的值从数据框中选择行

根据熊猫中多列中的值从数据框中选择行

在熊猫折线图中绘制多列[重复]

删除熊猫中多列中包含一段字符串的所有行