下面我有一个小数据集,包含3列、ID;标签和值.标签表示特征"值"所基于的信息来源.
我想为"价值"创建一个滞后功能.下面我以一种简单的方式做到这一点.然而,对于索引3和4,我们可以看到"tag"具有相同的值.这种情况我不希望.
我希望考虑"标签".我想要一个条件,即仅当"标签"功能不相同时才执行转移.
什么是执行此操作的好方法?
import pandas as pd
import numpy as np
df = pd.DataFrame({'ID':[1,1,1,2,2, 2,2,3,3,3],
'tag':[10, 11, 15, 11, 12, 12, 13, 16, 17, 18],
'value':[21, 19, 22, 41, 43, 43, 38, 9, 12, 16]})
df['value_lag'] = df.sort_values(by=['ID', 'tag']).groupby('ID')['value'].shift(1)
print(df)
ID tag value value_lag
0 1 10 21 NaN
1 1 11 19 21.0
2 1 15 22 19.0
3 2 11 41 NaN
4 2 12 43 41.0
5 2 12 43 43.0
6 2 13 38 43.0
7 3 16 9 NaN
8 3 17 12 9.0
9 3 18 16 12.0
期望的输出是:
ID tag value value_lag
0 1 10 21 NaN
1 1 11 19 21.0
2 1 15 22 19.0
3 2 11 41 NaN
4 2 12 43 41.0
5 2 12 43 41.0 -Here, should not be 43
6 2 13 38 43.0
7 3 16 9 NaN
8 3 17 12 9.0
9 3 18 16 12.0