3 回答
TA贡献1864条经验 获得超2个赞
与此答案类似,您可以使用列表理解。假设您的数据是干净的,例如没有空值。
zipper = zip(df['col1'], df['col2'])
df['status'] = [i.casefold() in j.casefold().split('|') for i, j in zipper]
print(df)
col1 col2 status
0 A a|x|y True
1 B a|x|y False
2 C c|x|z True
3 D e|j|y False
TA贡献1775条经验 获得超8个赞
也许您应该首先将数据框转换为更易于使用的格式。
我建议这样的事情:
>>> df = pd.concat([df['col1'], df['col2'].str.upper().str.split('|', expand=True)], axis=1)
>>> df
col1 0 1 2
0 A A X Y
1 B A X Y
2 C C X Z
3 D E J Y
现在你可以这样做:
>>> df['status'] = df.apply(lambda s: s.duplicated().any(), axis=1)
>>> df
col1 0 1 2 status
0 A A X Y True
1 B A X Y False
2 C C X Z True
3 D E J Y False
此解决方案假定您分隔的状态指示器'|'是唯一的,即您不能拥有类似'x|x|x'.
如果您不喜欢该建议,请考虑:
>>> df['status'] = df.apply(lambda row: row[0].lower() in row[1].split('|'), axis=1)
>>> df
col1 col2 status
0 A a|x|y True
1 B a|x|y False
2 C c|x|z True
3 D e|j|y False
添加回答
举报