Как изменить значения, которые на одну строку ниже значений, соответствующих условию? - PullRequest
2 голосов
/ 08 мая 2019

Есть ли эффективный способ изменить значение предыдущей строки, когда условие встречается в последующей записи?В частности, мне интересно, есть ли способ адаптировать pandas.where для изменения записи в строке до или после условного теста.Предположим, что

Data={'Energy':[12,13,14,12,15,16],'Time':[2,3,4,2,5,6]}    
DF = pd.DataFrame(Data)

DF
Out[123]: 
   Energy  Time
0      12     2
1      13     3
2      14     4
3      12     2
4      15     5
5      16     6

Если бы я хотел изменить значение энергии на 'X' всякий раз, когда время <= 2, я мог бы просто сделать что-то подобное.</p>

DF['ENERGY']=DF['ENERGY'].where(DF['TIME'] >2,'X')

или

DF.loc[DF['Time']<=2,'Energy']='X' 

Что бы вывести

    Energy  Time
0      X     2
1     13     3
2     14     4
3      X     2
4     15     5
5     16     6

Но что, если я хочу изменить значение 'Energy' в строке после времени <= 2, так что результат будет на самом деле. </p>

    Energy  Time
0     12     2
1      X     3
2     14     4
3     12     2
4      X     5
5     16     6

Есть ли легкая модификация для векторизованного подхода к этому?

1 Ответ

3 голосов
/ 08 мая 2019

Сдвиньте значения на одну строку вниз, используя Series.shift, а затем сравните:

df.loc[df['Time'].shift() <= 2, 'Energy'] = 'X'
df

  Energy  Time
0     12     2
1      X     3
2     14     4
3     12     2
4      X     5
5     16     6

Примечание: я предполагаю, что «X» на самом деле здесь что-то другое, но, к вашему сведению, смешиваниестроки и числовые данные приводят к столбцам типа object, что является известным анти-шаблоном панд.

...