首页 > 解决方案 > 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 周(因为我现在想要一周班次)。

我怎样才能轻松做到这一点?

标签: pythonpandas

解决方案


IIUC 使用weekdiff创建另一个组密钥

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()

推荐阅读