Обновите два столбца данных в зависимости от условия - PullRequest
2 голосов
/ 13 марта 2020

У меня есть фрейм данных со столбцами как «PK», «Column1», «Column2». Я хочу обновить столбец 1 и столбец 2 следующим образом:

If Column1 > Column2 then (Column1 = Column1 - Column2) and at the same time Column2 = 0

Аналогично

If Column1 < Column2 then (Column2 = Column2 - Column1) and at the same time Column1 = 0

Я пробовал следующее, но оно не дает ожидаемого результата:

df["Column1"] = np.where(df['Column1'] > df['Column2'], df['Column1'] - df['Column2'], 0)
df["Column2"] = np.where(df['Column1'] < df['Column2'], df['Column2'] - df['Column1'], 0)

1 Ответ

2 голосов
/ 13 марта 2020

Используйте DataFrame.assign, чтобы избежать проверки перезаписанного столбца Column1 во второй строке кода:

df = pd.DataFrame({
         'Column1':[4,5,4,5,5,4],
         'Column2':[7,8,9,4,2,3],

})
print (df)
   Column1  Column2
0        4        7
1        5        8
2        4        9
3        5        4
4        5        2
5        4        3

a = np.where(df['Column1'] > df['Column2'], df['Column1'] - df['Column2'], 0)
b = np.where(df['Column1'] < df['Column2'], df['Column2'] - df['Column1'], 0)

df = df.assign(Column1 = a, Column2 = b)
print (df)
   Column1  Column2
0        0        3
1        0        3
2        0        5
3        1        0
4        3        0
5        1        0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...