在Pandas数据框架中,如何在同一列中的不同行上提取值之间的差异,以第二列为条件?

时间:2018-06-01 07:11:17

标签: python pandas slice

这是一个较大项目的一部分,但我已将问题分解为步骤,所以这是第一步。拿一个Pandas数据框,如下:

index | user   time     
---------------------
 0      F       0   
 1      T       0   
 2      T       0   
 3      T       1   
 4      B       1 
 5      K       2 
 6      J       2 
 7      T       3 
 8      J       4 
 9      B       4 

对于每个唯一身份用户,我是否可以在列"时间,"中提取值之间的差异。但有一些条件?

因此,例如,有两个用户J的实例," time"这两个实例之间的差异是2.我可以提取这两行之间的差异吗?然后,如果该用户再次出现,请在数据框中提取该行与该用户之前的外观之间的差异吗?

2 个答案:

答案 0 :(得分:4)

我认为需要DataFrameGroupBy.diff

df['new'] = df.groupby('user')['time'].diff()
print (df)
  user  time  new
0    F     0  NaN
1    T     0  NaN
2    T     0  0.0
3    T     1  1.0
4    B     1  NaN
5    K     2  NaN
6    J     2  NaN
7    T     3  2.0
8    J     4  2.0
9    B     4  3.0

答案 1 :(得分:0)

我认为np.wherepandas shifts会这样做 这两个连续时间之间相减,只有当用户相同时

df1 = np.where (df['users'] == df['users'].shifts(-1), df['time'] - df['time'].shifts(-1), 'NaN')