Pandas сравнение заданных c строк - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть датафрейм, состоящий из двух столбцов winner и newcol2. Оба столбца содержат переменные белый черный и рисовать. Я хочу сравнить каждую строку в столбце. Например, если winner: white и newcol2: black возвращают 1

  winner    newcol2
0  white     black
1  black     white
2  white     white
3  draw      white
4  black     draw

conditions1 = [
(x['winner'] == 'white'),
(x['winner'] == 'draw'), 
(x['winner'] == 'black')]
conditions2 = [
(x['newcol2'] == 'white'),
(x['newcol2'] == 'draw'),
(x['newcol2'] == 'black')]

x['result'] = np.select(conditions1, conditions2, default='null')

Я пытался решить мою проблему с помощью следующего кода, но я получаю true и false для переменных, которые равны и не равны

Ответы [ 2 ]

2 голосов
/ 29 февраля 2020

Как я понимаю, вы хотите присвоить значение каждой уникальной комбинации двух столбцов в вашем DataFrame.

Вы можете использовать этот подход, чтобы создать dict с кодами или сгенерировать его с помощью itertools, если есть не все комбинации в кадре данных.

combs = set(zip(df['winner'], df['newcol2']))
codes = dict(zip(combs, range(len(combs))))

Используйте метод apply, чтобы заменить комбинации в двух столбцах кодированным значением:

df['result'] = df.apply(lambda x: codes[x['winner'], x['newcol2']], axis=1)
0 голосов
/ 29 февраля 2020

Я не уверен, что все ваши условия отличаются от приведенного вами примера, но это будет работать:

In [23]: conditions = []


In [24]: for row in df.itertuples(): 
...:     if row.winner == 'white' and row.newcol2 == 'black': 
...:         conditions.append(1) 
...:     elif row.winner == 'black' and row.newcol2 == 'white': 
...:         conditions.append(1) 
...:     else: 
...:         conditions.append(0) 
...:                                                                        

In [25]: conditions                                                             
Out[25]: [1, 1, 0, 0, 0]

In [26]: df['conditions'] = conditions                                          

In [27]: df                                                                     
Out[27]: 
  winner newcol2  conditions
0  white   black           1
1  black   white           1
2  white   white           0
3   draw   white           0
4  black    draw           0

Вы можете изменить код для любых ваших условий

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