我有这个df
d={}
d['id']=['1','1','1','1','1','1','1','1','2','2','2','2','2','2','2','2']
d['qty']=[5,5,5,5,5,6,5,5,1,1,2,2,2,3,5,8]
我想创建一个列,该列的 qty
列的值将不相等。这意味着如果 qty 等于 5 并且它的下一行是 5,我将跳过它并查找,直到找到下一个值不等于 5,在我的情况下它是 6。所有这些都应该按id
分组
这是所需的数据框。
d['id']=['1','1','1','1','1','1','1','1','2','2','2','2','2','2','2','2']
d['qty']=[5,5,5,5,5,6,5,5,1,1,2,2,2,3,5,8]
d['qty2']=[6,6,6,6,6,5,'NAN','NAN',2,2,3,3,3,5,8,'NAN']
非常感谢任何帮助
最佳答案
您可以groupby.shift
,屏蔽相同的值,并且 groupby.bfill
:
# shift up per group
s = df.groupby('id')['qty'].shift(-1)
# keep only the different values and bfill per group
df['qty2'] = s.where(df['qty'].ne(s)).groupby(df['id']).bfill()
输出:
id qty qty2
0 1 5 6.0
1 1 5 6.0
2 1 5 6.0
3 1 5 6.0
4 1 5 6.0
5 1 6 5.0
6 1 5 NaN
7 1 5 NaN
8 2 1 2.0
9 2 1 2.0
10 2 2 3.0
11 2 2 3.0
12 2 2 3.0
13 2 3 5.0
14 2 5 8.0
15 2 8 NaN
关于python - Pandas 数据框中列中最接近的不相等行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73700639/