通过Python/Pandas中的另一列查找Dataframe组的列中的增加、减少



在我的数据帧中,我想知道ordonnee的值与前一个值(前一行)相比是在减少、增加还是没有变化,并按列temps分组。

我已经尝试了这些帖子的方法:后堆叠气流

我试着分组,但这不起作用,你有想法吗?

entry = pd.DataFrame([['1',0,0],['1',1,1],['1',2,1],['1',3,1],['1',3,-2],['2',1,2],['2',1,3]],columns=['temps','abcisse','ordonnee'])
output = pd.DataFrame([['1',0,0,'--'],['1',1,1,'increase'],['1',2,1,'--'],['1',3,1,'--'],['1',3,-2,'decrease'],['2',1,2,'--'],['2',1,3,'increase']],columns=['temps','abcisse','ordonnee','variation'])

使用

In [5537]: s = entry.groupby('temps').ordonnee.diff().fillna(0)
In [5538]: entry['variation'] = np.where(s.eq(0), '--', 
np.where(s.gt(0), 'increase',
'decrease'))
In [5539]: entry
Out[5539]:
temps  abcisse  ordonnee variation
0     1        0         0        --
1     1        1         1  increase
2     1        2         1        --
3     1        3         1        --
4     1        3        -2  decrease
5     2        1         2        --
6     2        1         3  increase

此外,正如jezrael的评论所指出的,您可以使用np.select而不是np.where

In [5549]: entry['variation'] = np.select([s>0, s<0], ['increase', 'decrease'],
default='--')

详细信息

In [5541]: s
Out[5541]:
0    0.0
1    1.0
2    0.0
3    0.0
4   -3.0
5    0.0
6    1.0
Name: ordonnee, dtype: float64

使用np.where和groupby变换,即

entry['new'] = entry.groupby(['temps'])['ordonnee'].transform(lambda x : 
np.where(x.diff()>0,'incresase',
np.where(x.diff()<0,'decrease','--')))

输出:

temps abcisse or donee new0 1 0 0--1 1 1增加2 1 2 1--3 1 3 1--4 1 3-2减少5 2 1 2--6 2 1 3增量

相关内容

最新更新