Проверьте, находится ли значение столбцов в одном определенном столбце с пандами - PullRequest
0 голосов
/ 08 января 2019

Итак, у меня есть один фрейм данных с несколькими столбцами, и я хочу попытаться выяснить, находятся ли значения в моих столбцах " Linked .. " в столбце с именем " Новые имена", и если это так, то конкретное значение ячейки должно быть установлено таким образом" cell.value - Yes "или, если не так," cell.value - No "

import pandas as pd

d = {'New Names': ['a,b,c','a','c,d,e,f','a'], 'Linked Letter 0': 
['a','b','c','d'],
'Linked Letter 1': ['c','s','v','None'],
'Linked Letter 2': ['None','None','d','s']}

df_new = pd.DataFrame(data=d)

df_new


      Index   New Names   Linked Letter 0   Linked Letter 1   Linked Letter 2  
     ------- ----------- ----------------- ----------------- ----------------- 
        0       a,b,c       a                 c                 None             
        1       a           b                 s                 None             
        2       c,d,e,f     c                 v                 d                
        3       a           d                 None              s      

Таким образом, ожидаемый результат должен быть таким, как в следующей таблице;

    Index   New Names   Linked Letter 0   Linked Letter 1   Linked Letter 2  
    ------- ----------- ----------------- ----------------- ----------------- 
    0        a,b,c         a - YES           c - YES           None             
    1        a             b - NO            s - NO            None             
    2        c,d,e,f       c - YES           v - NO            d - YES          
    3        a             d - NO            None              s - NO    

Одна проблема с решением, представленным ниже:

Проблема в том, что отображение значений YES и NO в значения иногда не работает должным образом. Например, то же значение, которое получает YES в конце, может получить NO в следующей строке, даже если значение в столбце New Names одинаково в обеих строках.

Почему вы думаете, что это произойдет?

1 Ответ

0 голосов
/ 08 января 2019

Вы можете использовать pd.DataFrame.filter для фильтрации ваших Linked столбцов, понимания списка для создания логического массива и, наконец, loc с np.where для вашей условной логики:

df = pd.DataFrame(data=d)

for col in df.filter(like='Linked'):
    bools = [link in new_names for link, new_names in zip(df[col], df['New Names'])]
    df.loc[df[col] != 'None', col] += pd.Series(np.where(bools, ' - YES', ' - NO'))

print(df)

  Linked Letter 0 Linked Letter 1 Linked Letter 2 New Names
0         a - YES         c - YES            None     a,b,c
1          b - NO          s - NO            None         a
2         c - YES          v - NO         d - YES   c,d,e,f
3          d - NO            None          s - NO         a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...