Логическое индексирование Pandas для одного столбца данных для назначения значений

2

Я программист R и ищу аналогичный способ сделать что-то подобное в R:

data[data$x > value, y] <- 1

(в основном, берут все строки, где столбец x больше некоторого значения и присваивает столбцу y в этих строках значение 1)

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

data['y'][data['x'] > value] = 1

Но это дает SettingWithCopyWarning.

Эквивалентные утверждения, которые я пробовал:

condition = data['x']>value
data.loc(condition,'x')=1

Но я серьезно смущен. Возможно, я слишком много размышляю в терминах R и не могу окунуться в то, что происходит в Python. Что было бы эквивалентным кодом для этого в Python или обходным путем?

Теги:
pandas
dataframe

1 ответ

0
Лучший ответ

Ваше выражение неверно:

data.loc[condition, 'x'] = 1

Пример:

In [3]:

df = pd.DataFrame({'a':np.random.randn(10)})
df
Out[3]:
          a
0 -0.063579
1 -1.039022
2 -0.011687
3  0.036160
4  0.195576
5 -0.921599
6  0.494899
7 -0.125701
8 -1.779029
9  1.216818
In [4]:

condition = df['a'] > 0
df.loc[condition, 'a'] = 20
df
Out[4]:
           a
0  -0.063579
1  -1.039022
2  -0.011687
3  20.000000
4  20.000000
5  -0.921599
6  20.000000
7  -0.125701
8  -1.779029

Поскольку вы подписываете df, вам следует использовать квадратные скобки [] а не круглые скобки () которые являются вызовом функции. См. Документы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню