[英]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.