第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

重新采樣數(shù)據(jù)以保持 Python 數(shù)據(jù)真實(shí)性的更好方法?

重新采樣數(shù)據(jù)以保持 Python 數(shù)據(jù)真實(shí)性的更好方法?

炎炎設(shè)計(jì) 2023-05-09 10:55:13
我想重新采樣我的數(shù)據(jù),以便每個(gè)索引的日期時(shí)間之間的每個(gè)間隔有 512 秒。找到了resample方法pandas,但是不能正常使用,因?yàn)樽詈髸?huì)修改太多原始數(shù)據(jù)(原始數(shù)據(jù)的真實(shí)性不一樣)。但是,我想到了一種可能性,如果在日期時(shí)間之內(nèi),間隔只有2個(gè)數(shù)字,它們也可以相互劃分(512:4 = 128)。問題是它們的出現(xiàn)可以計(jì)算任意數(shù)量。使用以下代碼計(jì)算索引的間隔:intervals = np.array(round(df.index.to_series().diff().dt.total_seconds().fillna(0)))我的索引的間隔是這樣的:(因?yàn)槲业臄?shù)據(jù)每 4 或 512 秒記錄一次){4, 4, 4, 4, 4, 4, 4, 4, 4, 512,512, 512, 512, 512, 512, 512, 4, 4, 4, 4, 4, 512, 512, 512, 4, 4, 4, 4, 4, 4, 4, 4, 512, 4, 4, 4, 4, 512, 512, 521, 512, ...}問題是有時(shí)數(shù)據(jù)每 4 秒記錄一次,持續(xù) 5 分鐘(因此沒有足夠的時(shí)間來達(dá)到 512)然后它可能會(huì)出現(xiàn) 512 等等,如上例所示。這是一個(gè)問題,因?yàn)槲沂紫认氲揭苍S我應(yīng)該每 512 秒循環(huán)一次,然后刪除所有不在該間隔內(nèi)的行。(我刪除它們是因?yàn)槲抑恍枰?12秒記錄一次數(shù)據(jù),實(shí)際上沒有必要知道它在間隔內(nèi)是什么。它可能會(huì)增加,但它會(huì)改變很多。)我需要使其成為每 512 個(gè),但不使用重采樣方法,因?yàn)槿绻矣^察得好,它會(huì)破壞數(shù)據(jù)的真實(shí)性??偠灾瑑蓚€(gè)主要條件是:一是尊重并保持?jǐn)?shù)據(jù)的真實(shí)性;二是最終每512秒記錄一次數(shù)據(jù)。所以,我問你們,這個(gè)領(lǐng)域的專家,你們認(rèn)為最適合我的情況的方法或算法是什么?PS:我一直在尋找其他方法,比如 resample 但更好,但我沒有找到合適的方法。但是,我愿意接受新想法!讓我知道是否應(yīng)該添加有關(guān)該問題的其他詳細(xì)信息。非常感謝。
查看完整描述

1 回答

?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊

不會(huì)丟失數(shù)據(jù)的真實(shí)性resample()

  1. 已經(jīng)重新創(chuàng)建了一個(gè)示例數(shù)據(jù)集,我在其中以128 秒的間隔模擬了源數(shù)據(jù)

  2. 然后resample()512s

  3. 這可能意味著存在空桶,其中最后一個(gè)NaN并且基礎(chǔ)值列表為

  4. 你需要決定在這些情況下你想做什么。對(duì)于我對(duì)溫度數(shù)據(jù)進(jìn)行上采樣的情況,我的dropna()其他選擇顯然是fillna()

  5. 由于存在NaN您應(yīng)該考慮dfr = df.resample("512s")["val"].agg(last="last", vals=lambda s: list(s)).astype({"last":"Int64"})維護(hù)列的數(shù)據(jù)類型(即從int64更改為float64


總之,源數(shù)據(jù)的完整性沒有損失。您需要決定如何處理沒有適合 *bin* 的基礎(chǔ)數(shù)據(jù)的情況

d = [d for d in pd.date_range(dt.datetime(2019,5,1,2), 

                          dt.datetime(2019,5,1,4), freq="128s") 

     if random.randint(0,3) < 2 ] # miss some sample times... so resampling will give NaNs


df = pd.DataFrame({"ts":d, "val":[random.randint(0,50) for x in d]}).set_index("ts")

dfr = df.resample("512s")["val"].agg(last="last", vals=lambda s: list(s))

dfr

輸出


                     last          vals

ts                                     

2019-05-01 01:59:28  27.0   [1, 41, 27]

2019-05-01 02:08:00  48.0  [14, 14, 48]

2019-05-01 02:16:32  43.0   [2, 49, 43]

2019-05-01 02:25:04  43.0          [43]

2019-05-01 02:33:36  44.0          [44]

2019-05-01 02:42:08  38.0      [39, 38]

2019-05-01 02:50:40  37.0          [37]

2019-05-01 02:59:12  25.0      [39, 25]

2019-05-01 03:07:44   1.0    [29, 8, 1]

2019-05-01 03:16:16  35.0  [12, 20, 35]

2019-05-01 03:24:48  33.0      [20, 33]

2019-05-01 03:33:20   5.0       [11, 5]

2019-05-01 03:41:52   NaN            []

2019-05-01 03:50:24   9.0           [9]


查看完整回答
反對(duì) 回復(fù) 2023-05-09
  • 1 回答
  • 0 關(guān)注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)