计算pandas中子组内的操作

时间:2017-08-04 16:41:38

标签: python pandas

我有一个包含多个子组的表。例如,人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 pandas中做到这一点?谢谢!

1 个答案:

答案 0 :(得分:3)

日期时间列上的

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