在我的数据框架中,我想知道ordonnee
值与先前值(前一行)相比是否正在减少,增加或不变,而按temps
列分组。< / p>
我已经尝试过这些帖子的方法了: stackoverflow post
我尝试组合,但这不起作用你有想法吗?
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'])
答案 0 :(得分:1)
使用
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
答案 1 :(得分:1)
使用带有groupby转换的np.where,即
entry['new'] = entry.groupby(['temps'])['ordonnee'].transform(lambda x : \
np.where(x.diff()>0,'incresase',
np.where(x.diff()<0,'decrease','--')))
输出:
temps abcisse ordonnee new 0 1 0 0 -- 1 1 1 1 incresase 2 1 2 1 -- 3 1 3 1 -- 4 1 3 -2 decrease 5 2 1 2 -- 6 2 1 3 incresase