我有一個 Pandas 資料框,其中包含在某些點重疊的時間間隔(圖 1)。我需要一個資料幀,它有一個從第一個 start_time 開始到最后一個 end_time 結束的時間序列(圖 2)。我必須以重疊的時間間隔總結 VIS 值。我想不通。我該怎么做?


uj5u.com熱心網友回復:
如果您粘貼資料而不是影像,我將能夠對此進行測驗。但這就是您可能想要考慮的方式。假設您的資料框稱為 df。
df['start_time'] = pd.to_datetime(df['start_time']) # in case it's not datetime already
df.set_index('start_time', inplace=True)
new_dates = pd.date_range(start=min(df.index), end=max(df.end_time), freq='15Min')
new_df = df.reindex(new_dates, fill_value=np.nan)
只要 start_time 中沒有重復項,這應該有效。如果有,那需要以其他方式處理。
重新采樣是另一種可能性,但沒有資料,很難說哪種方法有效。
uj5u.com熱心網友回復:
這個問題很容易用 python 包staircase解決,它建立在 pandas 和 numpy 上,目的是使用(數學)步驟函式。
假設您的原始資料幀被呼叫,df并且您在結果資料幀中想要的時間是一個名為times.
import staircase as sc
stepfunction = sc.Stairs(df, start="start_time", end="end_time", value="VIS")
result = stepfunction(times, include_index=True)
就是這樣,result是一個按時間索引的熊貓系列,并具有您想要的值。您可以使用reset_index系列上的方法將其轉換為所需格式的資料幀。
您可以times像這樣生成資料
import pandas as pd
times = pd.date_range(df["start_time"].min(), df["end_time"].max(), freq="30min")
為什么有效
資料框中的每一行都可以被認為是一個階躍函式。例如,第一行對應于一個階躍函式,它以零值開始,然后 at2002-02-03 04:15:00增加到值 10,然后 at2002-02-04 04:45:00回傳零。當您對每一行的所有階躍函式求和時,您就有一個階躍函式,其值是任何一點的所有 VIS 值的總和。這是分配給上述stepfunction變數的內容。該stepfunction變數是可呼叫的,并在指定的點回傳階躍函式的值。這就是示例的最后一行中result正在分配變數的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/325513.html
上一篇:選擇考慮到假期的營業日期
