Питон: добавление условного столбца к пандам, более питонное решение? - PullRequest
0 голосов
/ 01 февраля 2019

Я добавляю столбец в фрейм данных, где значения столбцов определяются путем сравнения двух других столбцов в фрейме данных.Код для добавления столбца:

lst = []
for x in range(len(df)):
    if df['ColumnA'][x] > df['ColumnB'][x]:
        lst.append(df['ColumnB'][x])
    else:
        lst.append(df['ColumnA'][x])

df['ColumnC'] = lst

Мой вопрос: есть ли более эффективный / питонский способ сделать это?В прошлом мне советовали с осторожностью относиться к тому, что я каждый раз перебираю все строки данных, поэтому хотел посмотреть, не упустил ли я что-нибудь.Спасибо!

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Использование numpy.where

df['ColumnC'] = np.where(df['ColumnA'] > df['ColumnB'], df['ColumnB'], df['ColumnA'])
0 голосов
/ 01 февраля 2019

немного больше кода, чем в других решениях, но, возможно, более обобщенно

mask = df[ColumnA] > df[ColumnB]
df[ColumnC] = pd.Series(index=df.index)
df[ColumnC].loc[mask] = df[ColumnA].loc[mask]
df[ColumnC].loc[~mask] = df[ColumnB].loc[~mask]
0 голосов
/ 01 февраля 2019

Да, просто возьмите минимум:

df['ColumnC'] = df[['ColumnA', 'ColumnB']].min(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...