Проверка наличия значения в любом указанном столбце той же таблицы - PullRequest
0 голосов
/ 24 ноября 2018

Я хотел проверить, присутствует ли значение определенной строки столбца в другом столбце.

df:

   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

Я, наконец, хочу, чтобы моя оценка не соответствовала этой логике.

1 Ответ

0 голосов
/ 24 ноября 2018

Вы можете преобразовать все значения в наборы с разделением, а затем сравнить на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...