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

数据帧-组内的排序和移位

  •  0
  • nad  · 技术社区  · 3 年前

    我有一个熊猫数据框,如下所示

    enter image description here

    此数据帧已按三列分组 O , A , N 但正如你所见,它不是按 time

    我的目标是根据 时间 通过维护 A. , N shift(-1) 手术 value 列来创建一个 value_next

    输出应该如下所示( NaN -

    enter image description here

    我做到了以下几点:

    import pandas as pd
      
    # Initialize data to lists.
    data = [{'time': 10, 'O': 1, 'A': 2, 'N':3, 'value': 10},
            {'time': 7, 'O': 1, 'A': 2, 'N':3, 'value': 11},
           {'time': 15, 'O': 1, 'A': 2, 'N':3, 'value': 12},
           {'time': 11, 'O': 2, 'A': 2, 'N':3, 'value': 20},
            {'time': 12, 'O': 2, 'A': 2, 'N':3, 'value': 21},
           {'time': 1, 'O': 2, 'A': 2, 'N':3, 'value': 25}]
      
    # Creates DataFrame.
    df = pd.DataFrame(data)
      
    #sorting
    df.sort_values(by=['O', 'A', 'N', 'time'], ascending=[True, True, True, True])
    
    #shift
    df['value_next'] = df.groupby(['O', 'A', 'N'])['value'].shift(-1)
    

    这将生成低于预期值的输出。我错过了什么?

    enter image description here

    请建议。

    0 回复  |  直到 3 年前
        1
  •  1
  •   Quang Hoang    3 年前

    sort_values 默认情况下不是就地操作。要么通过 inplace=True

    df.sort_values(['O','A', 'N', 'time'], inplace=True)
    # other operations
    

    或重新分配:

    df = df.sort_values(...)
    # other operations