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