代码之家  ›  专栏  ›  技术社区  ›  user96564

如果索引不同,如何停止切换大熊猫中的列

  •  1
  • user96564  · 技术社区  · 6 年前

    我有 data 这样地。

    enter image description here

    我想用 pandas shift 并减去 column . 这是 code 我用的。

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

    这是 output 我如愿以偿。

    enter image description here

    我如何预防 熊猫 从中减去 columns 如果 index ( Id) 是不同的。只有当 index 是一样的。我的欲望输出是这样的。使用 df.shift(-1, axis = 0) 也没有解决。 enter image description here

    有什么建议吗?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Aaron N. Brock    6 年前

    您可以快速完成此任务 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
    
        2
  •  6
  •   llllllllll    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