【问题标题】:Time series analysis in pandaspandas 中的时间序列分析
【发布时间】:2014-07-10 06:44:56
【问题描述】:

我有一个包含网站访问的 Pandas DataFrame,我有两列 ID 数字和 date 格式为 YYYY-mm-dd HH:mm:ss

我想获得一个数据框,其中包含客户每次访问之间的时间差。我找到了如何使用 GROUPBY 获取访问次数,但我不知道其余的。

编辑:

No.      IDs      date
 1      4678     2012-11-30 23:59:59
 2      4703     2012-11-30 23:59:23
 3      4678     2012-11-30 23:58:46
 4      5803     2012-11-30 23:58:19
 5      4678     2012-11-30 23:58:07

我想为每个 ID 号获取如下内容:

      Visit_number      duration since last visit
4678        1                    0
            2                    73s
            3                    39s

目前我只能用array.groupby(['IDs']).size()计算每个ID号的访问次数

【问题讨论】:

  • 你应该提供你所做的,数据框的样本和样本输出
  • 没有数据和代码有点模糊
  • 我进行了编辑以使其更清晰易懂

标签: python pandas time-series


【解决方案1】:

计算访问次数,可以使用groupby和cumcount

In [76]: df['Visit_Number'] = df.groupby('IDs').cumcount() + 1

接下来,在此期间,您可以为每个组使用diff

In [77]: df['duration'] = - df.groupby('IDs')['date'].diff()


In [78]: df
Out[78]: 
    IDs                date  Visit_Number  duration
0  4678 2012-11-30 23:59:59             1       NaT
1  4703 2012-11-30 23:59:23             1       NaT
2  4678 2012-11-30 23:58:46             2  00:01:13
3  5803 2012-11-30 23:58:19             1       NaT
4  4678 2012-11-30 23:58:07             3  00:00:39

这为您提供了 timedelta 的区别,只需几秒钟即可获得并填充 NaN 值:

In [79]: df['duration'] = df['duration'].astype('timedelta64[s]').fillna(0)

In [80]: df
Out[80]: 
    IDs                date  Visit_Number  duration
0  4678 2012-11-30 23:59:59             1         0
1  4703 2012-11-30 23:59:23             1         0
2  4678 2012-11-30 23:58:46             2        73
3  5803 2012-11-30 23:58:19             1         0
4  4678 2012-11-30 23:58:07             3        39

【讨论】:

    【解决方案2】:

    类似于以下内容:

    import pandas as pd
    import datetime
    
    a = pd.read_csv("a.csv")
    a.date = a.date.map(lambda s: datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S"))
    for user_id, series in a.sort("date").groupby("id"):
        print user_id, series.date.diff()
    

    输出:

    4678 4        NaT
    2   00:00:39
    0   00:01:13
    Name: date, dtype: timedelta64[ns]
    4703 1   NaT
    Name: date, dtype: timedelta64[ns]
    5803 3   NaT
    Name: date, dtype: timedelta64[ns]
    

    【讨论】:

      猜你喜欢
      • 2017-01-09
      • 2016-03-24
      • 2011-12-26
      • 2013-10-20
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多