Python Pandas Calculate average days between dates(巨蟒 pandas 计算日期之间的平均天数)
本文介绍了巨蟒 pandas 计算日期之间的平均天数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用以下巨蟒 pandas 数据帧df:
Customer_ID | Transaction_ID
ABC 2016-05-06-1234
ABC 2017-06-08-3456
ABC 2017-07-12-5678
ABC 2017-12-20-6789
BCD 2016-08-23-7891
BCD 2016-09-21-2345
BCD 2017-10-23-4567
不幸的是,日期隐藏在Transaction_id字符串中。我是这样编辑数据帧的。
#year of transaction
df['year'] = df['Transaction_ID'].astype(str).str[:4]
#date of transaction
df['date'] = df['Transaction_ID'].astype(str).str[:10]
#format date
df['date']=pd.to_datetime(df['date'], format='%Y-%m-%d')
#calculate visit number per year
df['visit_nr_yr'] = df.groupby(['Customer_ID', 'year']).cumcount()+1
现在df如下所示:
Customer_ID | Transaction_ID | year | date |visit_nr_yr
ABC 2016-05-06-1234 2016 2016-05-06 1
ABC 2017-06-08-3456 2017 2017-06-08 1
ABC 2017-07-12-5678 2017 2017-07-12 2
ABC 2017-12-20-6789 2017 2017-12-20 3
BCD 2016-08-23-7891 2016 2016-08-23 1
BCD 2016-09-21-2345 2016 2016-09-21 2
BCD 2017-10-23-4567 2017 2017-10-23 1
我需要计算以下内容:
- 每次访问的平均间隔天数(即介于第1&2和第2&;3之间)
- 一般两次访问的平均天数
首先,我想加入以下列"天数_间隔_访问_按年"(按Customer_ID计算):
Customer_ID|Transaction_ID |year| date |visit_nr_yr|days_bw_visits_yr
ABC 2016-05-06-1234 2016 2016-05-06 1 NaN
ABC 2017-06-08-3456 2017 2017-06-08 1 NaN
ABC 2017-07-12-5678 2017 2017-07-12 2 34
ABC 2017-12-20-6789 2017 2017-12-20 3 161
BCD 2016-08-23-7891 2016 2016-08-23 1 NaN
BCD 2016-09-21-2345 2016 2016-09-21 2 29
BCD 2017-10-23-4567 2017 2017-10-23 1 NaN
请注意,我故意避免0,并保留了NAN,以防有人在同一天有两次访问。
接下来,我想按访问计算两次访问之间的平均天数(因此在一年内介于1和2到2和3之间)。正在查找此输出:avg_days_bw_visits_1_2 | avg_days_bw_visits_2_3
31.5 161
最后,我想计算一下一般访问之间的平均天数:
output: 203.8
#the days between visits are 398,34,161,29,397 and the average of those
numbers is 203.8
我一直纠结于如何创建专栏"Days_bw_visors_yr"。 Nan必须被排除在数学之外。
推荐答案
您可以通过将"Date"列下移1来获取上次访问日期(按客户和年份分组):
df['previous_visit'] = df.groupby(['Customer_ID', 'year'])['date'].shift()
由此,两次访问之间的天数就是简单的差异:
df['days_bw_visits'] = df['date'] - df['previous_visit']
要计算平均值,请将日期增量对象转换为天数:
df['days_bw_visits'] = df['days_bw_visits'].apply(lambda x: x.days)
平均访问间隔天数:
df.groupby('visit_nr_yr')['days_bw_visits'].agg('mean')
df['days_bw_visits'].mean()
这篇关于巨蟒 pandas 计算日期之间的平均天数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:巨蟒 pandas 计算日期之间的平均天数
基础教程推荐
猜你喜欢
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
