簡體   English   中英

計算熊貓系列的質心

[英]calculate centroid of pandas series

我有一個帶有日期時間索引(例如降水)的熊貓系列。 我想計算該降水時間序列的質心(以值加權的日期時間的平均值)。 我的問題是我不能用浮點數乘以datetime對象。 (無效)想法如下所示(輸出應為datetime對象):

import pandas as pd
import datetime as dt
df = pd.DataFrame({'P':[1.2,10.1,5.6,0,0,0,0,0,3,4,6,4,8,2,0,0,0,0,0,0,0,0,0,0]}, index=[dt.datetime(2012,1,1,h) for h in range(24)])
P_sum = df['P'].sum()
prod = df.index * df['P']/P_sum
mean_date = prod.mean()

在計算乘積之前,請嘗試將datetime轉換為紀元時間戳(還將最終結果轉換回datetime)。 我希望這有幫助。

import pandas as pd
import datetime as dt
df = pd.DataFrame({'P':[1.2,10.1,5.6,0,0,0,0,0,3,4,6,4,8,2,0,0,0,0,0,0,0,0,0,0]}, index=[dt.datetime(2012,1,1,h) for h in range(24)])
P_sum = df['P'].sum()
df["epoch"] = [float(t.strftime('%s')) for t in df.index]
prod = df["epoch"] * df['P'] / P_sum
mean_date = prod.mean()
print dt.datetime.fromtimestamp(mean_date).strftime('%Y-%m-%d %H:%M:%S')

更新:這可能是您要尋找的內容:

import pandas as pd
import datetime as dt
df = pd.DataFrame({'P':[1.2,10.1,5.6,0,0,0,0,0,3,4,6,4,8,2,0,0,0,0,0,0,0,0,0,0]}, index=[dt.datetime(2012,1,1,h) for h in range(24)])
df["epoch"] = [float(t.strftime('%s')) for t in df.index]
mean_date = (df["epoch"] * df['P']).sum() / df['P'].sum()
print dt.datetime.fromtimestamp(mean_date).strftime('%Y-%m-%d %H:%M:%S')

輸出:

2012-01-01 07:00:00

更新2:具有更好的日期時間轉換的代碼(相同的輸出):

import pandas as pd
import datetime as dt
df = pd.DataFrame({'P':[1.2,10.1,5.6,0,0,0,0,0,3,4,6,4,8,2,0,0,0,0,0,0,0,0,0,0]}, index=[dt.datetime(2012,1,1,h) for h in range(24)]
df["epoch"] = df.index.astype('int64')//1e9
mean_date = (df["epoch"] * df['P']).sum() / df['P'].sum()
print dt.datetime.fromtimestamp(mean_date).strftime('%Y-%m-%d %H:%M:%S')

暫無
暫無

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

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