#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))
?