Итерация по серии для поиска значений> = x, затем использование значений - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть серия (длиной 201), созданная на основе чтения электронной таблицы .xlsx:

xl = pandas.ExcelFile(file)
data = xl.parse('Sheet1')
data.columns = ["a", "b", "c", "d", "e", "f", "g", "h"]
A = data.a

Так что я работаю с A, и если я print (A), я получаю

0      76.0
1      190.0
2      0.0
3      86.0
4      0.0

196    156.0
197    0.0
198    0.0
199    320.0
200    0.0
Name: Vazi, Length: 201, dtype: float64

Я хочу пройти через A, найти все значения => 180 и создать новый массив (или серию), где для значений в A => 180 я вычесть 180, но для значений в A = <180 I используйте оригинальное значение. Я пробовал следующее, но я получаю ошибки: </p>

nx = len(A)
for i in range (nx):
    if A_new(i) >= A(i) + 180:
        else A_new(i) == A(i)

1 Ответ

3 голосов
/ 02 февраля 2020

Использование Series.mask / Series.where:

new_s = s.mask(s.ge(180),s.sub(180))
#new_s = s.sub(180).where(s.ge(180),s) #or series.where

или np.where

new_s = pd.Series(data = np.where(s.ge(180),s.sub(180),s),
                  index = s.index,
                  name = s.name)

Мы могли бы также использовать Series.loc

new_s = s.copy()
new_s.loc[s.ge(180)] =s.sub(180)

new_s output

0       76.0
1       10.0
2        0.0
3       86.0
4        0.0
196    156.0
197      0.0
198      0.0
199    140.0
200      0.0
Name: Vazi, Length: 201, dtype: float64
...