簡體   English   中英

熊貓根據天數創建時間序列

[英]Pandas create time series from day counts

我有一個數據框架,其中包含許多天的時間序列數據,這些數據是全天定期采樣的網站點擊總數。 在每個新的一天,計數重置為零。 因此,在第一天結束時,點擊次數已達到9次。 然后在第2天,計數再次從0開始,並在一天結束時達到8次點擊...等等

day    value    time
------------------------
1        0      00:45:00
1        5      02:15:00
1        8      06:55:00
1        9      13:10:00
2        0      00:10:00
2        1      01:00:00
2        7      05:15:00     
2        8      11:45:00 
3        0      03:00:00
3        4      07:30:00
3        7      15:30:00

我想將各個天匯總在一起,以形成所有天數的累積時間序列。

day    value    time
------------------------
1        0      00:45:00
1        5      02:15:00
1        8      06:55:00
1        9      13:10:00
2        9      00:10:00
2        10     01:00:00
2        16     05:15:00     
2        17     11:45:00 
3        17     03:00:00
3        21     07:30:00
3        24     15:30:00

熊貓有辦法有效地做到這一點嗎? 非常感謝你的幫助。

您實際上是在問連續的組(而不是標准的groupby,它忽略了同一組中的項目是否在相鄰),所以我認為您需要使用diff:

In [11]: df['day'].diff().astype(bool)
0     True
1    False
2    False
3    False
4     True
5    False
6    False
7     True
8    False
9    False
Name: day, dtype: bool

注意:NaN會轉換為True! 如果可以保證每個組都是非空的並且每次都增加,則astype(bool)並不是嚴格必需的。

然后,您可以將其乘以相應的(最后一個)值:

In [12]: previous = (df.day.diff() * df['value'].shift())

In [13]: previous
Out[13]:
0   NaN
1     0
2     0
3     0
4     9
5     0
6     0
7     8
8     0
9     0
dtype: float64

我可能只是將第一個值設置為0(可以將fillna(0)用作fillna(0) ):

In [14]: previous.iloc[0] = 0

現在,加上這個總和即可得到您想要的結果:

In [15]: df['value'] + previous.cumsum()
Out[15]:
0     0
1     5
2     8
3     9
4    10
5    16
6    17
7    17
8    21
9    24
dtype: float64

我會那樣做

import pandas as pd

df=pd.DataFrame({'day':[1, 1, 1, 1, 2, 2, 2 , 3, 3, 3],\
                'value':[0 ,5 ,8 ,9 ,1 ,7 ,8 ,0 ,4 ,7]})
# Evaluate the offset to add
dd=df.groupby('day').max().cumsum()
df.set_index('day',inplace=True)
# Creation of offset dataframe
dd.index += 1
# Delete the last row
dd=dd[0:-1]
# Evaluate the first row
dd=dd.append(pd.DataFrame({'value':[0]},index=[df.index[0]]))
# Perform the addition
df = df.add(dd)

導致

   value
1      0
1      5
1      8
1      9
2     10
2     16
2     17
3     17
3     21
3     24

暫無
暫無

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

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