【问题标题】:Pandas, time series: count number of (ids, value) after running timestamp熊猫,时间序列:运行时间戳后的(ids,value)计数
【发布时间】:2020-07-29 04:27:49
【问题描述】:

给定以下DataFrame(tidy格式的时间序列表):

|     date     |  id  |   value   |
|--------------|------|-----------|
|  2019-01-01  |  AAA |   10      |
|  2019-01-01  |  BBB |   20      |
|  2019-01-01  |  CCC |   30      |
|  2019-01-02  |  AAA |   11      |
|  2019-01-02  |  CCC |   31      |
|  2019-01-03  |  BBB |   22      |

我想返回一个由date 列索引的表,列:

  • n_id 表示 id 的运行编号,在等于或晚于索引日期的日期报告至少 1 个值
  • n_value,代表非空value在索引日期或之后上报的流水号

对于上面的例子,期望的结果是

|     date     |  n_id|   n_value |
|--------------|------|-----------|
|  2019-01-01  |  3   |    6      | # ("AAA" reports [10,11], "BBB" reports [20, 22], "CCC" reports [30, 31])
|  2019-01-02  |  3   |    3      | # ("AAA" reports [11], "BBB" reports [22], "CCC" reports [31])
|  2019-01-03  |  1   |    1      | # ("BBB" reports [22])

这样做的最佳熊猫式方法是什么?

【问题讨论】:

    标签: python pandas rolling-computation


    【解决方案1】:

    经过反复试验,这是我的方法:

    s = df.pivot('date','id','value').iloc[::-1].notnull().cumsum()
    ret_df = pd.DataFrame({
        'n_id': s.gt(0).sum(1),
        'n_value': s.sum(1)
    }).sort_index().reset_index()
    

    输出:

            date  n_id  n_value
    0 2019-01-01     3        6
    1 2019-01-02     3        3
    2 2019-01-03     1        1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2020-04-16
      • 2015-06-25
      • 1970-01-01
      • 2019-06-08
      • 2020-12-06
      • 2013-02-03
      相关资源
      最近更新 更多