Как остановить смещение столбца в Pandas, если индекс отличается - PullRequest
0 голосов
/ 22 мая 2018

У меня есть data, как это.

enter image description here.

Я хочу использовать pandas shift и вычитать значения между column.Это code, который я использую.

df['Difference'] = (df['A'] - df['A'].shift(-1))

Это output, который я получил (как и ожидалось).

enter image description here

Как предотвратить вычитание pandas между columns, если index ( Id) отличается.Я хочу вычесть, только если index то же самое.Мой вывод желаний что-то вроде этого.Использование df.shift(-1, axis = 0) также не помогло.enter image description here

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вы можете сделать это быстро и грязно с np.where

import pandas as pd
import numpy as np

# Create Example Data
df = pd.DataFrame({
    'Id':[1, 1, 1, 2, 2, 2],
    'A': [6, 4, 11, 7, 9, 12]
})

# Where
df['Difference'] = np.where(
    # The Id's are the same
    df['Id'] == df['Id'].shift(-1), 
    # Take the difference
    df['A'] - df['A'].shift(-1), 
    # Else, np.NaN
    np.NaN
)

Вывод:

    A  Id  Difference
0   6   1         2.0
1   4   1        -7.0
2  11   1         NaN
3   7   2        -2.0
4   9   2        -3.0
5  12   2         NaN
0 голосов
/ 22 мая 2018

Вы можете сначала groupby 'id':

In [156]: df.assign(
     ...:   new_col=df.groupby('id').diff(-1)
     ...: )
Out[156]: 
    A  id  new_col
0   6   1      2.0
1   4   1     -7.0
2  11   1      NaN
3   7   2     -2.0
4   9   2     -4.0
5  13   2      NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...