У меня есть DataFrame с именем df
, и я хочу знать item
столбца, содержит ли элемент a
и c
.
import pandas as pd
df=pd.DataFrame({'id':[1,2,3],'item':['a,b,c','c,d,e','a,b']})
Input:
df
id item
0 1 a,b,c
1 2 c,d,e
2 3 a,b
В новом столбце contain_a
1
представляет item
столбца, содержащий элемент a
, который совпадает с столбцом contain_c
.
Expected:
df
id item contain_a contain_c
0 1 a,b,c 1 1
1 2 c,d,e 0 1
2 3 a,b 1 0
Попробуйте str.contains()
df['contains_a'] = df.item.str.contains('a').astype(int)
df['contains_c'] = df.item.str.contains('c').astype(int)
>>> df
id item contains_a contains_c
0 1 a,b,c 1 1
1 2 c,d,e 0 1
2 3 a,b 1 0
Или вы можете сделать это в цикле:
to_check = ['a','c']
for i in to_check:
df[f'contains_{i}'] = df.item.str.contains(i).astype(int)
Для обобщенного способа выполнения этого можно использовать str.get_dummies
указанием разделителя
df.item.str.get_dummies(',').add_prefix('contains_')
contains_a contains_b contains_c contains_d contains_e
0 1 1 1 0 0
1 0 0 1 1 1
2 1 1 0 0 0
pandas.Series.str.findall
df.join(
df.item.str.findall('(a|c)')
.str.join('|')
.str.get_dummies().add_prefix('contains_')
)
id item contains_a contains_c
0 1 a,b,c 1 1
1 2 c,d,e 0 1
2 3 a,b 1 0