Как сравнить строку одного столбца pandas с остальными столбцами и, если в каком-либо столбце строки найдено значение, добавить новую строку? - PullRequest
0 голосов
/ 16 марта 2020

image

Я хочу сравнить столбец «Категория» со всем участком предсказанного, и, если значение совпадает с любым столбцом, добавить столбец с именем ранга и вставить 1, если значение найдено или еще вставить 0

Ответы [ 2 ]

2 голосов
/ 16 марта 2020

Использование DataFrame.filter для столбцов predicted, сравниваемых по DataFrame.eq со столбцом Category, преобразование в целые числа, изменение имен столбцов на DataFrame.add_prefix и последнее добавление новых столбцов от DataFrame.join:

df = pd.DataFrame({
        'category':list('abcabc'),
         'B':[4,5,4,5,5,4],
         'predicted1':list('adadbd'),
         'predicted2':list('cbarac')
})
df1 = df.filter(like='predicted').eq(df['category'], axis=0).astype(int).add_prefix('new_')
df = df.join(df1)
print (df)
  category  B predicted1 predicted2  new_predicted1  new_predicted2
0        a  4          a          c               1               0
1        b  5          d          b               0               1
2        c  4          a          a               0               0
3        a  5          d          r               0               0
4        b  5          b          a               1               0
5        c  4          d          c               0               1
1 голос
/ 16 марта 2020

Это решение гораздо менее элегантно, чем предложенное @jezrael, однако вы можете попробовать его.

#sample dataframe
d = {'cat': ['comp-el', 'el', 'comp', 'comp-el', 'el', 'comp'], 'predicted1': ['com', 'al', 'p', 'col', 'el', 'comp'], 'predicted2': ['a', 'el', 'p', 'n', 's', 't']}
df = pd.DataFrame(data=d)

#iterating through rows
for i, row in df.iterrows():
  #assigning values
  cat = df.loc[i,'cat']
  predicted1 = df.loc[i,'predicted1']
  predicted2 = df.loc[i,'predicted2']
  #condition
  if (cat == predicted1 or cat == predicted2):
    df.loc[i,'rank'] = 1
  else:
    df.loc[i,'rank'] = 0

output:


       cat predicted1 predicted2  rank
0  comp-el        com          a   0.0
1       el         al         el   1.0
2     comp          p          p   0.0  
3  comp-el        col          n   0.0
4       el         el          s   1.0
5     comp       comp          t   1.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...