【发布时间】:2021-11-02 03:45:48
【问题描述】:
我有一个如下所示的 pandas 数据框
此数据框已按 O、A、N 三个列分组,但如您所见,它未按 time 列排序
我的目标是通过维护O、A、N 的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)
这会生成低于预期的输出。我错过了什么?
请提出建议。
【问题讨论】: