Переберите две серии в одну строку, а затем примените логику - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть две Панды Серии Высота и Расстояние.

Если высота больше 500, я хочу разделить высоту на 10. И то же самое для расстояния.

Я попробовал это...

for i,j in map(None,Height, Distance):
if i > 500:
    i = i/10
else:
    i=i
if j > 500:
    j=j/10
else:
    j=j

Есть ли способ сделать это с помощью двух логических операторов вместо четырех?

if i,j > 500:
    i = i/10 
    j = j/10
else:
    i=i+10
    j=j+10

Я получаю сообщение об ошибке

если i, j> 500: ^ SyntaxError: неверный синтаксис

Обратите внимание, что если я реализую i> 500 и j> 500, он должен удовлетворять обоим этим случаям для работы.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы можете использовать np.where из numpy, где вы можете указать условия обновления в одной строке для каждой серии:

import numpy as np
# For each series, divide value by 10 if condition is true else add 10
Height = np.where(Height > 500, Height/10, Height+10)
Distance = np.where(Distance > 500, Distance/10, Distance+10)
0 голосов
/ 14 февраля 2019

ПРИМЕЧАНИЕ. Вопрос был отредактирован, а вариант использования изменился после того, как был написан этот ответ.

Для этого не следует использовать цикл for: они медленнее и труднее для чтения.

Попробуйте вместо этого следующий код:

Height[Height > 500] /= 10
Distance[Distance > 500] /= 10

Это заменяет высоты и расстояния выше 500 их значениями, разделенными на 10. Если вам нужно сохранить значения оригинала, вы можете просто сделатьСначала копия:

corrected_height = Height.copy()
corrected_height[corrected_height > 500] /= 10
...