Я думаю, что вы ищете assign
, что по сути эквивалентно пандам mutate
в dplyr
.Ваше условное утверждение может быть написано с использованием списка или с использованием векторизованных методов (см. Ниже).
Возьмем пример фрейма данных, назовем его df
:
> df
a
1 0.50212013
2 1.01959213
3 -1.32490344
4 -0.82133375
5 0.23010548
6 -0.64410737
7 -0.46565442
8 -0.08943858
9 0.11489957
10 -0.21628132
R
/ dplyr
:
В R
вы можете использовать mutate
с ifelse
для создания столбца на основе условия (в этом примере это будет 'pos'
, когда столбец a больше 0
):
df = dplyr::mutate(df, col = ifelse(df$a > 0, 'pos', 'neg'))
И получающийся df
:
> df
a col
1 0.50212013 pos
2 1.01959213 pos
3 -1.32490344 neg
4 -0.82133375 neg
5 0.23010548 pos
6 -0.64410737 neg
7 -0.46565442 neg
8 -0.08943858 neg
9 0.11489957 pos
10 -0.21628132 neg
Python
/ Pandas
В pandas
, используйте assign
с пониманием списка:
df = df.assign(col = ['pos' if a > 0 else 'neg' for a in df['a']])
Полученный df
:
>>> df
a col
0 0.502120 pos
1 1.019592 pos
2 -1.324903 neg
3 -0.821334 neg
4 0.230105 pos
5 -0.644107 neg
6 -0.465654 neg
7 -0.089439 neg
8 0.114900 pos
9 -0.216281 neg
ifelse
, который вы использовали в R
, заменяется списком .
Варианты этого:
У вас нет для использования assign
: вы можете создать новый столбец непосредственно на df
без создания копии, еслиВы хотите:
df['col'] = ['pos' if a > 0 else 'neg' for a in df['a']]
Кроме того, вместо понимания списка вы можете использовать один из векторизованных методов numpy
для условных операторов, например, np.select
:
import numpy as np
df['col'] = np.select([df['a'] > 0], ['pos'], 'neg')
# or
df = df.assign(col = np.select([df['a'] > 0], ['pos'], 'neg'))