Python Pandas - 无法从另一个数据框列中的列识别字符串
Python Pandas - Cannot recognize a string from a column in another dataframe column
我有一个包含以下数据的数据框:
现在,如果 col_a 在 col_b.So 中,我将尝试使用 isIn 方法生成一个包含结果的新列,在这种情况下,我将尝试生成以下输出:
为此,我使用此代码:
df['res'] = df.col_a.isin(df.col_b)
但它总是 return 错误。我也试试这个:df['res'] = df.col_b.isin(df.col_a)
但结果相同...所有行均为 FALSE。
我做错了什么?
谢谢!
您可以通过 apply
:
检查每行 col_a
中的值是否在 col_b
中
df['res'] = df.apply(lambda x: x.col_a in x.col_b, axis=1)
或通过列表理解:
df['res'] = [a in b for a, b in zip(df.col_a, df.col_b)]
编辑:错误显然意味着有缺失值,所以if-else
声明是必要的:
df = pd.DataFrame({'col_a':['SQL','Java','C#', np.nan, 'Python', np.nan],
'col_b':['I.like_SQL_since_i_used_to_ETL',
'I like_programming_SQL.too',
'I prefer Java',
'I like beer',
np.nan,
np.nan]})
print (df)
df['res'] = df.apply(lambda x: x.col_a in x.col_b
if (x.col_a == x.col_a) and (x.col_b == x.col_b)
else False, axis=1)
df['res1'] = [a in b if (a == a) and (b == b) else False for a, b in zip(df.col_a, df.col_b)]
print (df)
col_a col_b res res1
0 SQL I.like_SQL_since_i_used_to_ETL True True
1 Java I like_programming_SQL.too False False
2 C# I prefer Java False False
3 NaN I like beer False False
4 Python NaN False False
5 NaN NaN False False
我有一个包含以下数据的数据框:
现在,如果 col_a 在 col_b.So 中,我将尝试使用 isIn 方法生成一个包含结果的新列,在这种情况下,我将尝试生成以下输出:
为此,我使用此代码:
df['res'] = df.col_a.isin(df.col_b)
但它总是 return 错误。我也试试这个:df['res'] = df.col_b.isin(df.col_a)
但结果相同...所有行均为 FALSE。
我做错了什么?
谢谢!
您可以通过 apply
:
col_a
中的值是否在 col_b
中
df['res'] = df.apply(lambda x: x.col_a in x.col_b, axis=1)
或通过列表理解:
df['res'] = [a in b for a, b in zip(df.col_a, df.col_b)]
编辑:错误显然意味着有缺失值,所以if-else
声明是必要的:
df = pd.DataFrame({'col_a':['SQL','Java','C#', np.nan, 'Python', np.nan],
'col_b':['I.like_SQL_since_i_used_to_ETL',
'I like_programming_SQL.too',
'I prefer Java',
'I like beer',
np.nan,
np.nan]})
print (df)
df['res'] = df.apply(lambda x: x.col_a in x.col_b
if (x.col_a == x.col_a) and (x.col_b == x.col_b)
else False, axis=1)
df['res1'] = [a in b if (a == a) and (b == b) else False for a, b in zip(df.col_a, df.col_b)]
print (df)
col_a col_b res res1
0 SQL I.like_SQL_since_i_used_to_ETL True True
1 Java I like_programming_SQL.too False False
2 C# I prefer Java False False
3 NaN I like beer False False
4 Python NaN False False
5 NaN NaN False False