在 str.findall 之后将函数应用于 pandas 数据框列
Applying function to pandas dataframe column after str.findall
我有这样一个包含两列的数据框 df
:
Col1 Col2
'abc-def-ghi' 1
'abc-opq-rst' 2
我创建了一个新列 Col3
,如下所示:
df['Col3'] = df['Col1'].str.findall('abc', flags=re.IGNORECASE)
然后得到了这样一个dataframe:
Col1 Col2 Col3
'abc-def-ghi' 1 [abc]
'abc-opq-rst' 2 [abc]
我现在想做的是创建一个新列 Col4
如果 Col3 包含 'abc'
则我得到一个列,否则为零。
我试着用一个函数来做到这一点:
def f(row):
if row['Col3'] == '[abc]':
val = 1
else:
val = 0
return val
并将其应用于我的 pandas 数据框:
df['Col4'] = df.apply(f, axis=1)
但我只得到 0,也在包含 'abc' 的列中。我认为我的 if 语句有问题。
我该如何解决?
随心所欲
df['Col4'] = df.Col3.astype(bool).astype(int)
我有这样一个包含两列的数据框 df
:
Col1 Col2
'abc-def-ghi' 1
'abc-opq-rst' 2
我创建了一个新列 Col3
,如下所示:
df['Col3'] = df['Col1'].str.findall('abc', flags=re.IGNORECASE)
然后得到了这样一个dataframe:
Col1 Col2 Col3
'abc-def-ghi' 1 [abc]
'abc-opq-rst' 2 [abc]
我现在想做的是创建一个新列 Col4
如果 Col3 包含 'abc'
则我得到一个列,否则为零。
我试着用一个函数来做到这一点:
def f(row):
if row['Col3'] == '[abc]':
val = 1
else:
val = 0
return val
并将其应用于我的 pandas 数据框:
df['Col4'] = df.apply(f, axis=1)
但我只得到 0,也在包含 'abc' 的列中。我认为我的 if 语句有问题。 我该如何解决?
随心所欲
df['Col4'] = df.Col3.astype(bool).astype(int)