python - 在组内使用 pandas.shift()
问题描述
我有一个带有面板数据的数据框,假设它是 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
推荐阅读
- javascript - 是否可以拦截 Vue Router 推送等动作?
- sql - Django ORM 查询
- firebase - 无法删除文档
- c# - 为什么这个数据库更新只在一台客户端电脑上什么都不做,而在其他几台电脑上却能正常工作?
- javascript - 如何在 Javascript 中对 Date.prototype.toLocaleString() 数组进行排序?
- flutter - 在 ListTile 中添加 3 个文本,更改每列的背景颜色,并在此列表中添加搜索
- python - 设置 QChartView 的背景颜色
- azure - Azure 存储:每个订阅是否可以拥有超过 250 个存储帐户?
- swift - Swift 5 Alamofire 5 - 解析 XML
- ios - Flurry 发送测试推送消息停止工作