簡體   English   中英

使用 python pandas 計算每日總和

[英]Calculate daily sums using python pandas

我正在嘗試使用熊貓計算每日值的總和。 這是測試文件 - http://pastebin.com/uSDfVkTS

這是我到目前為止提出的代碼:

import numpy as np
import datetime as dt
import pandas as pd

f = np.genfromtxt('test', dtype=[('datetime', '|S16'), ('data', '<i4')], delimiter=',')
dates = [dt.datetime.strptime(i, '%Y-%m-%d %H:%M') for i in f['datetime']]
s = pd.Series(f['data'], index = dates)
d = s.resample('D', how='sum')

使用給定的測試文件,這會產生:

2012-01-02    1128
Freq: D

第一個問題是計算的總和對應於第二天。 我已經能夠通過使用參數 loffset='-1d' 來解決這個問題。

現在實際的問題是數據可能不是從一天的 00:30 開始,而是從一天中的任何時間開始。 此外,數據的空白處充滿了 'nan' 值。

也就是說,是否可以設置計算每日總和所需的值數量的較低閾值? (例如,如果一天內少於 40 個值,則輸入 NaN 而不是總和)

我相信可以定義一個自定義函數來做到這一點並在 'how' 參數中引用它,但我不知道如何對函數本身進行編碼。

您可以直接在 Pandas 中執行此操作:

s = pd.read_csv('test', header=None, index_col=0, parse_dates=True)
d = s.groupby(lambda x: x.date()).aggregate(lambda x: sum(x) if len(x) >= 40 else np.nan)

             X.2
2012-01-01  1128

更簡單的方法是使用pd.Grouper

d = s.groupby(pd.Grouper(freq='1D')).sum()

暫無
暫無

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

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