如果索引不同,如何在Pandas中停止转移列

时间:2018-05-22 18:12:15

标签: python pandas dataframe

我有data这样的话。

enter image description here

我想使用pandas shift并在column之间减去值。这是我正在使用的code

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

这是我得到的output(如预期的那样)。

enter image description here

如果pandas不同,如何阻止columnsindex ( Id)之间减去。我只想在index相同的情况下减去。我的欲望输出是这样的。使用df.shift(-1, axis = 0)也没有解决。 enter image description here

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

您可以先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

答案 1 :(得分:3)

你可以快速做到这一点肮脏的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