在Python中检查两个字符串列是否相互包含
给定一个小数据集,如下所示:
id a b
0 1 lol lolec
1 2 rambo ram
2 3 ki pio
3 4 iloc loc
4 5 strip rstrip
5 6 lambda lambda
我想c根据以下标准创建一个新列?
如果a等于或子串b或反之亦然,则创建一个c具有值的新列1,否则将其保留为0.
我怎么能在 Pandas 或 Python 中做到这一点?
预期结果:
id a b c
0 1 lol lolec 1
1 2 rambo ram 1
2 3 ki pio 0
3 4 iloc loc 1
4 5 strip rstrip 1
5 6 lambda lambda 1
要检查a是 inb还是bin a,我们可以使用:
df.apply(lambda x: x.a in x.b, axis=1)
df.apply(lambda x: x.b in x.a, axis=1)
回答
使用zip和列表理解:
df['c'] = [int(a in b or b in a) for a, b in zip(df.a, df.b)]
df
id a b c
0 1 lol lolec 1
1 2 rambo ram 1
2 3 ki pio 0
3 4 iloc loc 1
4 5 strip rstrip 1
5 6 lambda lambda 1
或者使用apply,只需将两个条件与or:
df['c'] = df.apply(lambda r: int(r.a in r.b or r.b in r.a), axis=1)