Переписать Python ИЛИ рассчитанный столбец - PullRequest
0 голосов
/ 23 октября 2019

Я создаю новый столбец. Он будет ссылаться на текст в столбце A (проверка 3-х строковых условий), а результатом будет текст из столбца B. У меня есть этот код, и он работает, НО интересно, есть ли более чистый и лучший способ выполнить эту задачу. Код Psuedo будет выглядеть так: если в столбце 'linemove' есть какая-либо из этих строк, приведите результат из столбца 'Home'.

melted.loc[(melted['linemove'] == 'bigger dog') | (melted['linemove'] == 'flipped, now dog') | (melted['linemove'] == 'smaller favorite'), 'betOn'] = melted['Home']
melted.loc[(melted['linemove'] == 'smaller dog') | (melted['linemove'] == 'flipped, now favorite') | (melted['linemove'] == 'bigger favorite'), 'betOn'] = melted['Road']

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Другой способ, может быть, короче сделать это, это использовать np.select и .isin метод

import numpy as np
melted['betOn'] = np.select(
                      [ (melted['linemove'].isin(['bigger dog','flipped, now dog','smaller favorite']),
                        (melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']),
                      [ melted['Home'], # what to use when condition1 is true
                        melted['Road'] ], # what to use when condition2 is true
                      default = melted['betOn'])

Поскольку у вас есть только два условия, вы также можете просто выполнить

melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'betOn'] = melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'Home']
melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'betOn'] = melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'Home']

Преимущество метода np.select заключается в том, что вам не нужно располагать дважды строки (слева и справа)

1 голос
/ 23 октября 2019

Я думаю, что трудно сократить or, поскольку в конечном итоге вы пытаетесь реализовать логику.

Вы можете сделать его более читабельным, определив массив логических выходных данных, а затем использовать этоустановить значения, например;

my_condition = melted[ (melted['linemove'] == 'bigger dog') | (melted['linemove'] == 'flipped, now dog') | (melted['linemove'] == 'smaller favorite') ]

melted.loc[ my_condition, 'betOn' ] = melted.loc[ my_condition, 'Home' ]

и дать my_condition значимое имя (я действительно изо всех сил пытался понять контекст вашего состояния, чтобы назвать его хорошо!).

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