2017-08-04 47 views
0

我有一个有多个子组的表。例如,人A总共有三次访问,而人B总共有两次访问。我也有每次访问的时间:在熊猫中的子组内计算操作

id  visit  time_of_visit    
A  1   2002-01-15    
A  2   2003-01-15     
A  3   2003-02-15    
B  1   1996-08-09    
B  2   1998-08-09 

我要计算每个访问是年对每个人而言多久分开。所以我想这样的事情:

id  visit  time_of_visit  difference_in_time   
A  1   2002-01-15  na   
A  2   2003-01-15  1   
A  3   2003-02-15  0.0833   
B  1   1996-08-09  na  
B  2   1998-08-09  2 

任何想法如何在python熊猫做到这一点?谢谢!

回答

3

在datetime列groupby.diff会给你

df['time_of_visit'] = pd.to_datetime(df['time_of_visit']) 

df.groupby('id')['time_of_visit'].diff() 
Out: 
0  NaT 
1 365 days 
2 31 days 
3  NaT 
4 730 days 
Name: time_of_visit, dtype: timedelta64[ns] 

然而,timedeltas不能给你几年,因为它不是一个衡量标准。你总是可以按照自己的规则进行转换(例如,除以365)。

df.groupby('id')['time_of_visit'].diff().dt.days/365 
Out: 
0   NaN 
1 1.000000 
2 0.084932 
3   NaN 
4 2.000000 
Name: time_of_visit, dtype: float64