Сравнение значения с предыдущей строкой в фрейме данных Pandas

#python #pandas

#python #pandas

Вопрос:

 import pandas as pd
data={'col1':[1,3,3,1,2,3,2,2]}
df=pd.DataFrame(data,columns=['col1'])
print df


     col1  
0     1          
1     3          
2     3          
3     1          
4     2          
5     3          
6     2          
7     2      
  

У меня есть следующий фрейм данных Pandas, и я хочу создать еще один столбец, который сравнивает предыдущую строку col1, чтобы увидеть, больше ли значение строки, чем значение предыдущей строки. Это должно выглядеть следующим образом:

     col1  match  
0     1   False     
1     3   False     
2     3   True     
3     1   False     
4     2   False     
5     3   True     
6     2   False     
7     2   True 
  

Спасибо.

Ответ №1:

Сравните сдвинутые значения на Series.gt и Series.shift , последнее пропущенное значение заменяется на -1 for True , работает, если все значения положительные:

 df['match'] = df['col1'].gt(df['col1'].shift(-1, fill_value=-1))
print (df)

   col1  match
0     1  False
1     3  False
2     3   True
3     1  False
4     2  False
5     3   True
6     2  False
7     2   True
  

Если требуется установить последнее значение True для любого фрейма данных:

 df['match'] = df['col1'].gt(df['col1'].shift(-1))
df.loc[df.index[-1], 'match'] = True
    
  

Комментарии:

1. Это работает только с gt ? или оператор >= тоже будет работать?

2. Спасибо за ваш быстрый ответ. Еще один быстрый вопрос: что, если я хочу сравнить значения строк с пользовательскими операциями? Скажем, вывести «True», если значение строки больше, чем значение предыдущей строки на 20%?

3. @adirabargil — gt похоже > , используется для => ge

4. @NovaPoi — 20% Вам нужно 20% от значений и сравнения? Не понимаю, я думаю, это должен быть новый вопрос.

5. @NovaPoi — или нужно df['match'] = df['col1'].gt(df['col1'].mul(0.2).shift(-1, fill_value=-1)) ?