我正在尝试使用熊猫计算每日价值总和.这是测试文件 - 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')
Run Code Online (Sandbox Code Playgroud)
使用给定的测试文件,这会产生:
2012-01-02 1128
Freq: D
Run Code Online (Sandbox Code Playgroud)
第一个问题是计算的总和对应于第二天.我已经能够通过使用参数loffset =' - 1d'来解决这个问题.
现在实际问题是数据可能不是从一天的00:30开始,而是在一天中的任何时间开始.此外,数据的空白也充满了'nan'值.
也就是说,是否可以设置计算每日总和所需的数值的下限?(例如,如果一天中的值少于40,则输入NaN而不是总和)
我相信可以定义一个自定义函数来执行此操作并在'how'参数中引用它,但我不知道如何编写函数本身.
eum*_*iro 13
你可以直接在熊猫中做到:
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
Run Code Online (Sandbox Code Playgroud)