【发布时间】:2020-01-14 16:18:44
【问题描述】:
很长一段时间以来,我一直坚持我最初认为是一项简单的任务。在这里,我将使用示例数据,因为实际的问题数据要混乱得多(而且保密)。基本上我有两列都包含字符串。我想检查列“子字符串”的每一行,如果它是“字符串”列的任何行的子字符串:
s1 = ['good', 'how', 'hello', 'start']
s2 = ['exit', 'hello you','where are you', 'goodbye']
test = pd.DataFrame({'substring':s1, 'string':s2})
>>> test
string substring
0 exit good
1 hello you how
2 where are you hello
3 goodbye start
如果列 A 是列 B 中任何位置的子字符串,则基本上我希望每一行都有一些指示符:
>>>test
string substring C
0 exit good True
1 hello you how False
2 where are you hello True
3 goodbye start False
我似乎尝试了很多事情,但我迷路了。
我尝试过遍历行:
sub_test = pd.DataFrame(columns=test.columns)
for index, row in test.iterrows():
a = row['substring']
delta = test[test['string'].str.contains(a)]
if len(delta.index > 1):
sub_test = pd.concat([sub_test, delta])
这给了我一些帮助并返回:
>>>sub_test
string substring
3 goodbye start
1 hello you how
我认为有一种使用 lambda 的方法,但我没有成功:
test['C'] = test.apply(lambda row: row['substring'] in policies['substring'], axis = 1)
任何帮助将不胜感激。 谢谢
【问题讨论】:
标签: python pandas lambda iteration