我有一个如下所示的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_animal
和is_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
列,但似乎不起作用。
答案 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