python - 在组内使用 pandas.shift()

标签 python pandas pandas-groupby

我有一个包含面板数据的数据框,假设它是 100 个不同对象的时间序列:

object  period  value 
1       1       24
1       2       67
...
1       1000    56
2       1       59
2       2       46
...
2       1000    64
3       1       54
...
100     1       451
100     2       153
...
100     1000    21

我想添加一个新列 prev_value 来存储每个对象以前的 value:

object  period  value  prev_value
1       1       24     nan
1       2       67     24
...
1       99      445    1243
1       1000    56     445
2       1       59     nan
2       2       46     59
...
2       1000    64     784
3       1       54     nan
...
100     1       451    nan
100     2       153    451
...
100     1000    21     1121

我可以使用 .shift() 和 .groupby() 来做到这一点吗?

最佳答案

Pandas 的分组对象有 groupby.DataFrameGroupBy.shift方法,它将移动每个组 n periods 中的指定列,就像常规数据帧的 shift 方法一样:

df['prev_value'] = df.groupby('object')['value'].shift()

对于以下示例数据框:

print(df)

     object  period  value
0       1       1     24
1       1       2     67
2       1       4     89
3       2       4      5
4       2      23     23

结果将是:

     object  period  value  prev_value
0       1       1     24         NaN
1       1       2     67        24.0
2       1       4     89        67.0
3       2       4      5         NaN
4       2      23     23         5.0

关于python - 在组内使用 pandas.shift(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53335567/

相关文章:

Python pandas 从数据帧生成列表

python - While 循环问题 - Python

python - 使用 python 打印交替行

python - Pandas 自条件以来的行数

python - Pandas - 将 groupby() 与rolling() 和 apply() 一起使用时非常慢

python - pandas 按一天中的时间分组,每组 15 分钟

python - 使用 Python 在迭代创建的嵌套列表中选择上面的级别

python - Pandas 根据独特值进行分组和聚合

python - 如何使用 bool 掩码在 pandas DataFrame 中用 nan 替换 'any strings'?

pandas - 比较 pandas 中不同数据框中的两列