我试图查找跨多个列是否存在字符串。如果字符串存在,我想返回1,如果它不是数据帧中的新系列,则返回0。
在搜索论坛后,我了解str.contains可以使用,但我搜索超过100列,因此我一次只能处理单个系列并不是有效的。
如果相关,则列中有一些NAs。
简化数据框示例:
d = {'strings_1': ['AA', 'AB', 'AV'], 'strings_2': ['BB', 'BA', 'AG'],
'strings_1': ['AE', 'AC', 'AI'], 'strings_3': ['AA', 'DD', 'PP'],
'strings_4': ['AV', 'AB', 'BV']}
simple_df = pd.DataFrame(data=d)
如果我有兴趣找到AA' AA'例如,我想返回以下数据帧。
目标数据框示例:
d = {'strings_1': ['AA', 'AB', 'AV'], 'strings_2': ['BB', 'BA', 'AG'],
'strings_1': ['AE', 'AC', 'AI'], 'strings_3': ['AA', 'DD', 'PP'],
'strings_4': ['AV', 'AB', 'BV'], 'AA_TRUE': [1, 0, 0]}
target_df = pd.DataFrame(data=d)
非常感谢您的帮助。
答案 0 :(得分:3)
如果需要检查混合值 - 带字符串的数字比较values
创建的numpy数组,请使用DataFrame.any
检查每行至少一个True
,最后一次转换为int
:
simple_df['new'] = (simple_df.values == 'AA').any(1).astype(int)
#or cast all values to string before comparing
#simple_df['new'] = (simple_df.astype(str)== 'AA').any(1).astype(int)
print (simple_df)
strings_1 strings_2 strings_3 strings_4 new
0 AE BB AA AV 1
1 AC BA DD AB 0
2 AI AG PP BV 0
详情:
print ((simple_df.values == 'AA'))
[[False False True False False]
[False False False False False]
[False False False False False]]
print ((simple_df.values == 'AA').any(1))
[ True False False]
如果需要检查子字符串:
simple_df['new'] = simple_df.applymap(lambda x: 'G' in x).any(1).astype(int)
print (simple_df)
strings_1 strings_2 strings_3 strings_4 new
0 AE BB AA AV 0
1 AC BA DD AB 0
2 AI AG PP BV 1