首页 > 解决方案 > 根据同一熊猫数据框的另一列中是否存在子字符串为列分配值

问题描述

好的,我有一个 DataFrame,其中包含单独列中的名称和值。但是,我需要以不同的方式对待某些值。幸运的是,要区别对待的值的名称中包含字符串“Rate”或“ratio”。

我想做的是创建一个新列,称为“比率/比率?”,当这两个字符串之一出现在名称中时,它被分配一个值“是”。否则被赋值为“No”

到目前为止,我已经创建了所有值都分配给“否”的列,并且想要一些方法来逐行迭代数据框。

我相信答案在于 pandas.loc 和 numpy.where 的某种组合,但我遇到了一些我不熟悉的错误,主要是

ValueError("cannot reindex from a duplicate axis")

我尝试了很多不同的方法来解决这个问题,最近的效果是:

appendedAggregate.loc[appendedAggregate['Rate/Ratio?'].where(appendedAggregate.loc[appendedAggregate['KPI Alias'].str.contains('Rate' or 'ratio')])] = 'Yes'

appendedAggregate是数据框。

标签: pythonpandasnumpy

解决方案


您可以df.apply在列中使用 lambda。使用|instr. containsOR运算符添加到您的单词列表中。

(?i)rate|ratio对于不区分大小写的匹配

尝试这个:

 df['Rate/Ratio?'] =df['name'].apply(lambda x: 'Yes' if x.str.contains(r'Rate|ratio') else 'No') 

推荐阅读