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

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

Python - 在 Pandas 中平均重采樣的最佳方法

Python - 在 Pandas 中平均重采樣的最佳方法

九州編程 2023-07-27 10:37:13
我有一個(gè)數(shù)據(jù)框。這是一個(gè)非常有限的例子。userID    scoreMetric    timeStamp    123       5              2020-05-16 22:03:19313       1              2020-05-16 22:03:20123       4              2020-05-16 22:13:20313       2              2020-05-16 22:13:20123       2              2020-05-16 22:32:20555       5              2020-05-16 22:32:20123       2              2020-05-16 22:32:56這是測試代碼import pandas as pdfrom datetime import datetimedata = { 'userID': [123, 313, 123, 313, 123, 555, 123], 'scoreMetric': [5,1,4,2,2,5,2], 'timeStamp': ['2020-05-16 22:03:19', '2020-05-16 22:03:20', '2020-05-16 22:13:20', '2020-05-16 22:13:20', '2020-05-16 22:32:20', '2020-05-16 22:32:20', '2020-05-16 22:32:56'] }df = pd.DataFrame( data, columns=['userID', 'scoreMetric', 'timeStamp'])df.timeStamp = list( map( lambda x: datetime.strftime( datetime.strptime( x, '%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S' ), df.timeStamp ) )df.timeStamp = pd.to_datetime( df.timeStamp )我想要的是每個(gè)用戶的平均值除以一個(gè)時(shí)間段內(nèi)的用戶數(shù)量。讓我們以 22:00:01-22:30:00 作為我們的時(shí)間段。我們這里有 2 個(gè)用戶 (123, 313),每個(gè)用戶都有兩個(gè)時(shí)間戳。所以我想要 [ (5+4)/2 + (1+2)/2 ] / 2 = [ 4.5 + 1.5 ] / = 3 作為我的返回值?,F(xiàn)在我們?nèi)?22:30:01 到 23:00:00。我們這里又有 2 個(gè)用戶 (123, 555),其時(shí)間戳可變。所以我想要 [ (2+2)/2 + (5)/1 ] / 2 = [ 2 + 5 ] / 2 = 3.5我認(rèn)為應(yīng)該有一種有效的方法通過重采樣來做到這一點(diǎn)。例如,當(dāng)我只計(jì)算平均值時(shí)我可以做df.set_index('timeStamp').scoreMetric.resample('30M').mean().fillna(0)然后給出 30 分鐘內(nèi)所有得分指標(biāo)的平均值。我已經(jīng)嘗試了一些方法,但似乎沒有什么可以解決采樣問題,然后首先在每個(gè)用戶的基礎(chǔ)上進(jìn)行計(jì)算。有沒有方便的方法可以像這樣簡單的聲明來做到這一點(diǎn)?我是否需要手動將時(shí)間序列分塊,然后分段進(jìn)行平均值等?
查看完整描述

2 回答

?
隔江千里

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

IIUC,用于pd.Grouper按 30 分鐘分組并userID獲取每個(gè) ID 的平均值,另一個(gè)groupby按時(shí)間僅獲取每次平均值:


print (df.groupby([pd.Grouper(key="timeStamp", freq="1800s"), "userID"])

         .mean()["scoreMetric"].groupby(level=0).mean())


timeStamp

2020-05-16 22:00:00    3.0

2020-05-16 22:30:00    3.5


查看完整回答
反對 回復(fù) 2023-07-27
?
皈依舞

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

如果我理解正確的話,您可以執(zhí)行以下操作:

import numpy as np
df.set_index('timeStamp',inplace=True)

在這里您可以過濾日期:

data=df[(df.index > '2020-05-16 22:00:01') & (df.index  < '2020-05-16 22:30:00 ')]

進(jìn)而:

data.groupby('userID')['scoreMetric'].mean().mean()

輸出:

3


查看完整回答
反對 回復(fù) 2023-07-27
  • 2 回答
  • 0 關(guān)注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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