python-3.x - 检查该值是否存在于同一个表的任何指定列中
问题描述
我想检查一列的特定行的值是否存在于另一列中。
东风:
sno id1 id2 id3
1 1,2 7 1,2,7,22
2 2 8,9 2,8,9,15,17
3 1,5 6 1,5,6,17,33
4 4 4,12,18
5 9 9,14
输出:
对于特定的给定行,
for i in sno:
if id1 in id3 :
score = 50
elif id2 in id3:
score = 50
if id1 in id3 and id2 in id3:
score = 75
我终于希望我的分数脱离这种逻辑。
解决方案
您可以使用 split 将所有值转换为集合,然后进行比较issubset
,也and bool(a)
用于省略空集合(从缺失值创建):
print (df)
sno id1 id2 id3
0 1 1,2 7 1,20,70,22
1 2 2 8,9 2,8,9,15,17
2 3 1,5 6 1,5,6,17,33
3 4 4 NaN 4,12,18
4 5 NaN 9 9,14
def convert(x):
return set(x.split(',')) if isinstance(x, str) else set([])
cols = ['id1', 'id2', 'id3']
df1 = df[cols].applymap(convert)
m1 = np.array([a.issubset(b) and bool(a) for a, b in zip(df1['id1'], df1['id3'])])
m2 = np.array([a.issubset(b) and bool(a) for a, b in zip(df1['id2'], df1['id3'])])
df['new'] = np.select([m1 & m2, m1 | m2], [75, 50], np.nan)
print (df)
sno id1 id2 id3 new
0 1 1,2 7 1,20,70,22 NaN
1 2 2 8,9 2,8,9,15,17 75.0
2 3 1,5 6 1,5,6,17,33 75.0
3 4 4 NaN 4,12,18 50.0
4 5 NaN 9 9,14 50.0
推荐阅读
- excel-formula - 用于两个标准的适当公式
- ruby-on-rails - Wasabi::Resolver::HTTPError: Error: 500 for url
- java - HarmonyOS 在 Android OS 中 valueAnimator.removeAllUpdateListeners() 的替代方法是什么?
- java - 如何使用多个用户对 Elasticsearch 进行身份验证
- c# - UWP - 如何在项目属性更改时更改 ItemsControl 项目的 DataTemplate?
- javascript - 我想交换两个子 div 的位置
- php - laravel 中 asform() 进行身份验证的替代方法?
- c# - 如何在 Selenium 中处理用户关闭
- computer-vision - Yolov3 模型给出了不好的结果
- python - 我可以知道谁在 windows 中运行当前的 python 脚本吗?