基于列的值的GroupBy和Shift

时间:2019-03-04 14:55:20

标签: python pandas

假设我具有以下数据集:

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周(因为我现在要转移1周)。

我如何轻松地做到这一点?

1 个答案:

答案 0 :(得分:2)

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