【问题标题】:How can I get the average days between timestamps in pandas?如何获得熊猫时间戳之间的平均天数?
【发布时间】:2018-03-14 15:21:39
【问题描述】:

我有带有客户发票之间时间戳的交易数据。我正在尝试计算两个唯一发票之间的平均天数(通过“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 时间戳并计算距离下一个 invoiceno. 的第一个 ServicedOn 时间戳的天数。
  • 例如:发票号。 21312 我会查看第一个 servicedOn(4/26/2015) 并计算直到发票号的天数。 31639 的第一次服务(2015 年 6 月 12 日)。

标签: python pandas datetime data-science


【解决方案1】:

对所有发票编号执行您想要的操作非常简单。如果第一个 ServicedOn 是您要进行的,您可以排序,然后使用 groupbyhead 获取每个 InvoiceNo 的第一个日期,然后选择该列并计算平均差:

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

【讨论】:

  • 一个大问题是 Pandas 没有计算 ServicedOn 列的差异并抛出不受支持的操作数错误“str”。
  • 这意味着您的 ServicedOn 列尚未被解析为日期时间。
  • 当我输入交易数据时,我应该只在一个日期时间列上提供服务吗?谢谢!
  • 您有两个选择。如果您正在从例如 CSV 文件中读取此数据,您可以使用 parse_dates 选项到 read_csv 来解析您读取它时的日期。如果由于某种原因您有其他形式,您可以使用 df.ServicedOn = pandas.to_datetime(df.ServicedOn) 重新解析该列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 2018-10-31
  • 2022-01-11
  • 1970-01-01
相关资源
最近更新 更多