簡體   English   中英

Pandas,時間序列:運行時間戳后的(ids,value)計數

[英]Pandas, time series: count number of (ids, value) after running timestamp

給定以下 DataFrame(整齊格式的時序表):

|     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表示在等於或晚於索引日期的日期報告至少 1 個值的id的運行編號
  • 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])

這樣做的最佳熊貓式方式是什么?

經過反復試驗,這是我的方法:

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()

Output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM