如何获得 pandas 中时间戳之间的平均天数?
How can I get the average days between timestamps in pandas?
我的交易数据带有客户发票之间的时间戳。我正在尝试计算两张唯一发票之间的平均天数(按 'ServicedOn')。两个注意事项是:
- 一张唯一的发票可以有多个具有不同时间戳的行(因为它们可能在不同的时间提供服务)。
- 时间戳也有时间值,所以我无法使用 diff() 方法来计算增量天数。
数据框看起来是这样的:
InvoiceNo SoldOn ServicedOn ItemType ItemCode GuestId FinalSalePrice FirstVisit Package BUName SalePrice Merchant_id
21312 4/26/2015 12:55:12 PM 4/26/2015 8:00:00 AM 0 SER-310-008 5a531810-9413-4091-acd5-424d125b0c9e 3089.9 No No Package Spa 2500 POW
31639 1153 6/12/2015 7:11:22 PM 6/12/2015 6:15:00 PM 0 SER-1257-008 5a531810-9413-4091-acd5-424d125b0c9e 5700.0 No No Package Spa 5000 POW
42492 73 5/15/2015 8:05:50 PM 5/15/2015 8:05:50 PM 2 ITM-3407-001 5a531810-9413-4091-acd5-424d125b0c9e 1600.0 No No Package Default 1422 POW
42493 73 5/15/2015 8:06:08 PM 5/15/2015 8:06:08 PM 2 ITM-3175-001 5a531810-9413-4091-acd5-424d125b0c9e 2750.0 No No Package Default 2444 POW
42494 73 5/15/2015 8:05:38 PM 5/15/2015 8:05:38 PM 2 ITM-4340-001 5a531810-9413-4091-acd5-424d125b0c9e 575.0 No No Package Default 511 POW
我不确定如何进行,因此欢迎任何指导!
对所有发票编号执行您想要的操作非常简单。如果第一个 ServicedOn 是您要进行的操作,则可以排序,然后使用 groupby
和 head
获取每个 InvoiceNo 的第一个日期,然后 select 该列并计算平均值差异:
mean_difference = (df.sort_values(by='ServicedOn') # Get everything in date order
.groupby('InvoiceNo') # group by invoice
.head(1) # take first of each group
.ServicedOn # only look at ServicedOn value
.diff() # take differences
.mean()) # calculate mean
我的交易数据带有客户发票之间的时间戳。我正在尝试计算两张唯一发票之间的平均天数(按 'ServicedOn')。两个注意事项是:
- 一张唯一的发票可以有多个具有不同时间戳的行(因为它们可能在不同的时间提供服务)。
- 时间戳也有时间值,所以我无法使用 diff() 方法来计算增量天数。
数据框看起来是这样的:
InvoiceNo SoldOn ServicedOn ItemType ItemCode GuestId FinalSalePrice FirstVisit Package BUName SalePrice Merchant_id
21312 4/26/2015 12:55:12 PM 4/26/2015 8:00:00 AM 0 SER-310-008 5a531810-9413-4091-acd5-424d125b0c9e 3089.9 No No Package Spa 2500 POW
31639 1153 6/12/2015 7:11:22 PM 6/12/2015 6:15:00 PM 0 SER-1257-008 5a531810-9413-4091-acd5-424d125b0c9e 5700.0 No No Package Spa 5000 POW
42492 73 5/15/2015 8:05:50 PM 5/15/2015 8:05:50 PM 2 ITM-3407-001 5a531810-9413-4091-acd5-424d125b0c9e 1600.0 No No Package Default 1422 POW
42493 73 5/15/2015 8:06:08 PM 5/15/2015 8:06:08 PM 2 ITM-3175-001 5a531810-9413-4091-acd5-424d125b0c9e 2750.0 No No Package Default 2444 POW
42494 73 5/15/2015 8:05:38 PM 5/15/2015 8:05:38 PM 2 ITM-4340-001 5a531810-9413-4091-acd5-424d125b0c9e 575.0 No No Package Default 511 POW
我不确定如何进行,因此欢迎任何指导!
对所有发票编号执行您想要的操作非常简单。如果第一个 ServicedOn 是您要进行的操作,则可以排序,然后使用 groupby
和 head
获取每个 InvoiceNo 的第一个日期,然后 select 该列并计算平均值差异:
mean_difference = (df.sort_values(by='ServicedOn') # Get everything in date order
.groupby('InvoiceNo') # group by invoice
.head(1) # take first of each group
.ServicedOn # only look at ServicedOn value
.diff() # take differences
.mean()) # calculate mean