如果现有列的值包含特定的子字符串,则创建新的pd.DataFrame列

时间:2020-03-04 13:56:22

标签: python pandas dataframe filter

我有一个如下所示的DataFrame:

     entity   
0     cat  
1     dog
2     tree
3     dog
4     flower

我想创建一个名为type的新列,该列包含基于entity中的值包含子字符串的条件的值

substring1 = 'cat|og'
substring2 = 'ree|ower'

生成的DataFrame应该如下所示:

    entity      type   
0     cat      animal
1     dog      animal
2     tree     plant
3     dog      animal
4     flower   plant

我采用的方法是采用pd.Series.str.contains,并创建两个布尔列is_animalis_plant

如何修改下面的代码,以消除对两个布尔列的需要,而只拥有type列?

df.loc[:, 'is_animal'] = df.entity.astype(str).str.contains(substring1, case=False)
df.loc[:, 'is_plant'] = df.entity.astype(str).str.contains(substring2, case=False)

我尝试使用iteritems()遍历DataFrame来创建type列,但似乎不起作用。

1 个答案:

答案 0 :(得分:0)

您可以通过添加type来为substring创建字典,然后仅通过对匹配行进行比较d = {'animal':substring1, 'plant':substring2} s = df.entity.astype(str) for k, v in d.items(): df.loc[s.str.contains(v, case=False), 'type'] = k print (df) entity type 0 cat animal 1 dog animal 2 tree plant 3 dog animal 4 flower plant 来设置新值:

Xcodes