pandas 组中日期之间差异的标准差
Standard deviation of difference between dates in pandas group by
我有一个交易数据框。我的专栏之一是日期 (datetime64[ns])。我正在按用户分组(电子邮件作为 id)。我感兴趣的是每个用户的订单之间的时间变化。所以我在 group by 中寻找的是找到每个用户的日期(以天为单位)之间差异的标准偏差。如果用户有两个或最少的交易,答案应该是 0。这是一些数据框(我手动更改了一些东西):
df
email date
0 cuadros.paolo@gmail.com 2018-05-01 12:29:59
1 rlez_1202@hotmail.com 2018-07-11 13:43:22
2 cuadros.paolo@gmail.com 2018-09-21 12:29:23
3 paola.alvarado@rumah.com.pe 2018-09-01 09:21:43
4 luchosuito@gmail.com 2018-04-30 12:29:30
5 paola.alvarado@rumah.com.pe 2018-03-22 12:29:23
6 davida.alvarado.703@gmail.com 2018-07-21 12:29:17
7 cuadros.paolo@gmail.com 2018-08-11 12:29:41
8 rlez_1202@hotmail.com 2018-05-23 12:29:14
9 luchosuito@gmail.com 2018-06-01 12:29:17
10 jessica26011@hotmail.com 2018-07-18 12:29:20
11 cuadros.paolo@gmail.com 2018-08-21 12:29:40
12 rlez_1202@hotmail.com 2018-10-01 12:29:31
13 paola.alvarado@rumah.com.pe 2018-06-01 12:29:20
14 miluska-paico@hotmail.com 2018-05-21 12:29:18
15 cinthia_leon87@hotmail.com 2018-07-20 12:29:59
试了很多方法,还是搞不定。请帮忙
对于顺序差异,根据您的解释,这似乎最有意义:
df.sort_values('date').groupby('email').apply(lambda x: x.date.diff().std()).fillna(0)
输出:
email
cinthia_leon87@hotmail.com 0 days 00:00:00
cuadros.paolo@gmail.com 48 days 05:04:12.988006
davida.alvarado.703@gmail.com 0 days 00:00:00
jessica26011@hotmail.com 0 days 00:00:00
luchosuito@gmail.com 0 days 00:00:00
miluska-paico@hotmail.com 0 days 00:00:00
paola.alvarado@rumah.com.pe 14 days 18:10:16.764069
rlez_1202@hotmail.com 23 days 06:17:04.453408
dtype: timedelta64[ns]
.std()
对于具有 1 个值非空值的组将为空,并且由于 .diff
将非空观察值的数量减少 1,这会自动 returns NaN
对于具有 2 个或更少测量值的任何组,我们用 0 填充。
另请注意,pandas
的默认设置是使用 N-1
个自由度。
我有一个交易数据框。我的专栏之一是日期 (datetime64[ns])。我正在按用户分组(电子邮件作为 id)。我感兴趣的是每个用户的订单之间的时间变化。所以我在 group by 中寻找的是找到每个用户的日期(以天为单位)之间差异的标准偏差。如果用户有两个或最少的交易,答案应该是 0。这是一些数据框(我手动更改了一些东西):
df
email date
0 cuadros.paolo@gmail.com 2018-05-01 12:29:59
1 rlez_1202@hotmail.com 2018-07-11 13:43:22
2 cuadros.paolo@gmail.com 2018-09-21 12:29:23
3 paola.alvarado@rumah.com.pe 2018-09-01 09:21:43
4 luchosuito@gmail.com 2018-04-30 12:29:30
5 paola.alvarado@rumah.com.pe 2018-03-22 12:29:23
6 davida.alvarado.703@gmail.com 2018-07-21 12:29:17
7 cuadros.paolo@gmail.com 2018-08-11 12:29:41
8 rlez_1202@hotmail.com 2018-05-23 12:29:14
9 luchosuito@gmail.com 2018-06-01 12:29:17
10 jessica26011@hotmail.com 2018-07-18 12:29:20
11 cuadros.paolo@gmail.com 2018-08-21 12:29:40
12 rlez_1202@hotmail.com 2018-10-01 12:29:31
13 paola.alvarado@rumah.com.pe 2018-06-01 12:29:20
14 miluska-paico@hotmail.com 2018-05-21 12:29:18
15 cinthia_leon87@hotmail.com 2018-07-20 12:29:59
试了很多方法,还是搞不定。请帮忙
对于顺序差异,根据您的解释,这似乎最有意义:
df.sort_values('date').groupby('email').apply(lambda x: x.date.diff().std()).fillna(0)
输出:
email
cinthia_leon87@hotmail.com 0 days 00:00:00
cuadros.paolo@gmail.com 48 days 05:04:12.988006
davida.alvarado.703@gmail.com 0 days 00:00:00
jessica26011@hotmail.com 0 days 00:00:00
luchosuito@gmail.com 0 days 00:00:00
miluska-paico@hotmail.com 0 days 00:00:00
paola.alvarado@rumah.com.pe 14 days 18:10:16.764069
rlez_1202@hotmail.com 23 days 06:17:04.453408
dtype: timedelta64[ns]
.std()
对于具有 1 个值非空值的组将为空,并且由于 .diff
将非空观察值的数量减少 1,这会自动 returns NaN
对于具有 2 个或更少测量值的任何组,我们用 0 填充。
另请注意,pandas
的默认设置是使用 N-1
个自由度。