我有這個 df,它是實際的樣本。每行代表以大約 20 分鐘的間隔和其他幾列進行的測量。
datetime value
261 2022-10-21 02:00:13 0.164299
262 2022-10-21 02:20:12 0.163009
263 2022-10-21 02:40:14 0.162298
264 2022-10-21 03:00:12 0.162846
265 2022-10-24 08:46:38 1.788360
266 2022-10-24 09:06:47 1.442915
267 2022-10-24 09:27:28 1.246774
268 2022-10-24 09:46:58 0.194352
如您所見,2022-10-21 03:00:12和之間有一個間隙2022-10-24 08:46:38。我需要一種方法來首先確定差距在哪里(可能有 n 個),然后用適當的日期和對應值的 nan 填充這些行。
現在我正在生成缺失的日期,如下所示:
# number of periods of 20 minutes between dates
periods = (df.iloc[265,0] - df.iloc[264,0]).total_seconds() / 60.0 / 20
# dates to fill gap
pd.date_range(df.iloc[264,0], df.iloc[265,0], periods=periods)
知道如何做到這一點嗎?
編輯:預期輸出(我不需要在新行上添加的完全相同的分鐘數,它們僅供參考)
datetime value
261 2022-10-21 02:00:13 0.164299
262 2022-10-21 02:20:12 0.163009
263 2022-10-21 02:40:14 0.162298
264 2022-10-21 03:00:12 0.162846
265 2022-10-21 03:20:00 NaN
266 2022-10-21 03:40:00 NaN
...
n-4 2022-10-24 08:26:00 NaN
n-3 2022-10-24 08:46:38 1.788360
n-2 2022-10-24 09:06:47 1.442915
n-1 2022-10-24 09:27:28 1.246774
n 2022-10-24 09:46:58 0.194352
uj5u.com熱心網友回復:
嘗試(也許不是最干凈的解決方案 - 它會嘗試找到 > 40 分鐘的間隙,然后添加 20 分鐘的間隔NaN值):
mask = df["datetime"].diff() > "40 minutes"
dfs = []
for idx, row in df[mask].iterrows():
prev_time = df.loc[idx - 1, "datetime"]
dr = pd.date_range(
prev_time pd.Timedelta("20 minutes"),
row["datetime"] - pd.Timedelta("20 minutes"),
freq="20min",
)
dfs.append(
pd.DataFrame(
[{"datetime": dr}],
index=[idx - 1],
)
)
df = pd.concat([df, *dfs]).sort_index().explode("datetime")
print(df)
印刷:
datetime value
261 2022-10-21 02:00:13 0.164299
262 2022-10-21 02:20:12 0.163009
263 2022-10-21 02:40:14 0.162298
264 2022-10-21 03:00:12 0.162846
264 2022-10-21 03:20:12 NaN
264 2022-10-21 03:40:12 NaN
...
264 2022-10-24 08:00:12 NaN
264 2022-10-24 08:20:12 NaN
265 2022-10-24 08:46:38 1.788360
266 2022-10-24 09:06:47 1.442915
267 2022-10-24 09:27:28 1.246774
268 2022-10-24 09:46:58 0.194352
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532787.html
