Присвоить подмножеству столбцов, используя метод цепочки в Pandas - PullRequest
0 голосов
/ 09 ноября 2018

Я хотел бы использовать современный способ создания цепочек методов Панд для присвоения значений подмножеству столбцов.

Допустим, у меня есть следующий фрейм данных

df = pd.DataFrame({'a': [1, 0, 0, 1]})

   a
0  1
1  0
2  0
3  1

Я бы хотел получить эквивалент

df.loc[df.a == 1, 'a'] = 2

с чем-то вроде

df.query('a == 1').assign(a=2)

Тем не менее, вышеизложенное создает субкадр данных и не изменяет весь фрейм данных. Это как-то возможно достичь?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете присвоить значение, используя следующий код

df[df['a']==1]['a']=2
0 голосов
/ 09 ноября 2018

Метод query, как видно из его названия, предназначен для запроса к фрейму данных , , а не для установки значений .

Таким образом, loc вполне уместно, отметив, что вы можете присвоить серии строку:

df.loc[df.a == 1, 'a'] = 2

Более идиоматическим может быть использование pd.Series.mask, которое вы даже можете использовать на месте:

df['a'].mask(df['a'] == 1, 2, inplace=True)

Вы должны рассматривать «сцепление методов» как средство для достижения цели , а не само требование или цель. Если вы используете цепочку методов, вы можете использовать pd.DataFrame.assign:

df = df.assign(a=df['a'].mask(df['a'] == 1, 2))

В качестве изолированной операции я считаю это менее читабельным. Но вы можете найти это полезным с несколькими связанными операциями через цепочку методов.

...