Сравнение значений строк с помощью функции сдвига - PullRequest
0 голосов
/ 08 октября 2019

Я изучаю панд и наткнулся на следующий метод сравнения строк в кадре данных.

Здесь я использую функции np.were и shift() для сравнения значений в столбце.

import pandas as pd 
import numpy as np

# Initialise data to Dicts of series. 
d = {'col' : pd.Series([10, 30, 20, 40, 70, 60])} 

# creates Dataframe. 
df = pd.DataFrame(d)
df['Relation'] = np.where(df['col'] > df['col'].shift(), "Grater", "Less")
df

Здесь вывод выглядит следующим образом:

    col Relation
0   10  Less
1   30  Grater
2   20  Less
3   40  Grater
4   70  Grater
5   60  Less

У меня путаница в строке 3, почему она выглядит как Grater ?, 40 меньше 70, поэтому она должна выглядеть как Less. Что я тут не так делаю?

1 Ответ

2 голосов
/ 08 октября 2019

Потому что сравнить 40 с 20, потому что индекс сдвига на 1:

df['Relation'] = np.where(df['col'] > df['col'].shift(), "Grater", "Less")

df['shifted'] = df['col'].shift()
df['m'] = df['col'] > df['col'].shift()
print (df)

   col Relation  shifted      m
0   10     Less      NaN  False
1   30   Grater     10.0   True
2   20     Less     30.0  False
3   40   Grater     20.0   True <- here
4   70   Grater     40.0   True
5   60     Less     70.0  False

Может быть, вы хотите сдвинуть на -1:

df['Relation'] = np.where(df['col'] > df['col'].shift(-1), "Grater", "Less")

df['shifted'] = df['col'].shift(-1)
df['m'] = df['col'] > df['col'].shift(-1)
print (df)

   col Relation  shifted      m
0   10     Less     30.0  False
1   30   Grater     20.0   True
2   20     Less     40.0  False
3   40     Less     70.0  False
4   70   Grater     60.0   True
5   60     Less      NaN  False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...