python - GroupBy 和 Shift 基于列的值
问题描述
假设我有以下数据集:
Stock_id Week Stock_value
1 1 2
1 2 4
1 4 7
1 5 1
2 3 8
2 4 6
2 5 5
2 6 3
我想改变Stock_value
列的值,但只能连续几周。
这应该给出以下输出:
Stock_id Week Stock_value
1 1 NA
1 2 2
1 4 NA
1 5 7
2 3 NA
2 4 8
2 5 6
2 6 5
因此,例如在商店 1,第 2 周的 Stock_value 不应该转移到第 4 周(因为我现在想要一周班次)。
我怎样才能轻松做到这一点?
解决方案
IIUC 使用week
其diff
创建另一个组密钥
df.groupby([df.Stock_id,df.Week.diff().ne(1).cumsum()]).Stock_value.shift()
Out[157]:
0 NaN
1 2.0
2 NaN
3 7.0
4 NaN
5 8.0
6 6.0
7 5.0
Name: Stock_value, dtype: float64
#df['Stock_value2']= df.groupby([df.Stock_id,df.Week.diff().ne(1).cumsum()]).Stock_value.shift()
推荐阅读
- java - Kafka、Quarkus 和 Avro 在同一主题中的几种事件类型
- laravel-7 - 用户首次在 Laravel 7 中注册后如何重定向到动态路由
- jmeter - 我们可以停止 JMeter 负载测试自动停止吗
- angular - 角度请求返回 NET::ERR_CERT_AUTHORITY_INVALID
- java - java中小型静态数据集的内存自动完成实现
- javascript - 如何在不更改原始属性的情况下从角度 ReactiveForm 中删除属性?
- mysql - '字段列表'mysql中的未知列''
- elasticsearch - 如何在搜索查询中编写条件?
- loops - 用于循环的 Pine 脚本
- angular - (Angular)为什么我的数组没有变空?