【问题标题】:An easy way to calculate time intervals between dates in a column in Python在 Python 中计算列中日期之间时间间隔的简单方法
【发布时间】:2021-04-30 05:32:48
【问题描述】:

假设我有一个这样的 Pandas DataFrame:

 item   event      date 
  A       1     2020-03-09
  B       1     2020-03-09
  A       2     2020-05-01
  B       2     2020-05-01
  C       2     2020-05-01
  A       3     2020-06-25
  C       3     2020-06-25
  B       4     2020-07-18
  C       4     2020-07-18

此数据框包含每个“事件”每个“项目”的唯一日期。所以这意味着一个项目有几个不同日期的事件。

现在我想计算每个项目日期之间的平均天数。所以这将是每个项目的不同值,因此需要我计算每个项目每个事件的日期之间的平均时间。

所以预期的输出如下所示:

  item   average_interval_in_days
    A              54
    B              65.5
    C              39.5 

有人知道怎么做吗?

【问题讨论】:

  • 请提供您尝试的代码。
  • 我没有卡在代码中,我卡在了早期阶段:'我们可以通过什么方式实现这一点'。

标签: python pandas dataframe date


【解决方案1】:

与@BradSolomon 的回答非常相似,但有两个小区别:

df.sort_values(['item', 'date']).groupby('item')['date'].agg(
    lambda g: g.diff().mean() / pd.Timedelta(days=1))

# gives:
item
A    54.0
B    65.5
C    39.0

注意事项:

  1. 确保日期在每个组中排序,否则平均值将取决于顺序;在你的例子中,日期恰好是排序的,所以如果你能保证它,你可以跳过.sort_values()
  2. 使用... / pd.Timedelta(days=1) 直接生成以天为单位的平均差。

速度的替代方案(没有排序,没有 lambda,但更不透明)

gb = df.groupby('item')['date']
(gb.max() - gb.min()) / (gb.count() - 1) / pd.Timedelta(days=1)

# gives:
item
A    54.0
B    65.5
C    39.0

【讨论】:

  • 谢谢@BradSolomon;查看快速版本...
  • @PierreD 快速版本很棒。
  • 不错。知道必须有办法在没有.apply() 的情况下做到这一点。
猜你喜欢
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多