【问题标题】:Pandas dataframe - sort and shift within a group [duplicate]Pandas数据框 - 在组内排序和移位[重复]
【发布时间】:2021-11-02 03:45:48
【问题描述】:

我有一个如下所示的 pandas 数据框

此数据框已按 OAN 三个列分组,但如您所见,它未按 time 列排序

我的目标是通过维护OAN 的groupby 来根据time 列对其进行排序,然后对value 列执行shift(-1) 操作以创建value_next观察。

输出应如下所示(NaN 被估算为 -1` 用于演示)

我在下面做了:

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)

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

请提出建议。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

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

    或重新分配:

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

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 2019-03-20
      • 2013-11-01
      • 2016-08-14
      • 1970-01-01
      • 2019-02-05
      • 2017-02-13
      • 1970-01-01
      相关资源
      最近更新 更多