Pandas Dataframe: назначать разные столбцы на основе положительных / отрицательных значений - PullRequest
0 голосов
/ 29 ноября 2018

То, чего я хочу добиться, это:

   a  b  c
0  1  0  0
1 -1  0  0

с указанным выше кадром данных, относительно столбца a, для положительных строк, присваивать соответствующие строки в столбце b, для отрицательных значений,присвоить столбцу c:

   a  b  c
0  1  1  0
1 -1  0 -1

Я сейчас использую следующий код, но есть ли способ, которым я могу написать его в одну строку вместо двух?

import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [1, -1], 'b':[0, 0], 'c':[0,0]})
df.b = np.where(df.a > 0, df.a, df.b)
df.c = np.where(df.a < 0, df.a, df.c)

Ответы [ 2 ]

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

Я начал с того, что выписал

df.b, df.c = (df.a > 0)*df.a + (df.a < 0)*df.b, (df.a < 0)*df.a +  (df.a > 0)*df.c

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

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

Я думаю, что с использованием np.where просто отлично, если вы хотите, чтобы они были в одной строке

s=df.assign(key=['b','c']).set_index('key',append=True).unstack().sum(level=1,axis=1)
s
key    b    c
0    1.0  0.0
1    0.0 -1.0
df.update(s)
df
   a    b    c
0  1  1.0  0.0
1 -1  0.0 -1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...