2015-06-18 2 views
2

Я R программист и ищу подобный образ, чтобы сделать что-то подобное в R:Панды логическая индексация на одном столбце dataframe присвоить значения

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

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

В панд, казалось бы эквивалент пошел бы что-то вроде:

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

Но это дает НастройкаWithCopyWarning.

Эквивалентные заявления я попытался это:

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

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

ответ

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 

Как вы индексации ФР вы должны использовать квадратные скобки [], а не круглые скобки () который является вызовом функции. См. docs

Смежные вопросы