我有这样的dataFrame,我想每60分钟分组一次,并在06:30开始分组.
data
index
2017-02-14 06:29:57 11198648
2017-02-14 06:30:01 11198650
2017-02-14 06:37:22 11198706
2017-02-14 23:11:13 11207728
2017-02-14 23:21:43 11207774
2017-02-14 23:22:36 11207776
Run Code Online (Sandbox Code Playgroud)
我在用:
df.groupby(pd.TimeGrouper(freq='60Min'))
Run Code Online (Sandbox Code Playgroud)
我得到这个分组:
data
index
2017-02-14 06:00:00 x1
2017-02-14 07:00:00 x2
2017-02-14 08:00:00 x3
2017-02-14 09:00:00 x4
2017-02-14 10:00:00 x5
Run Code Online (Sandbox Code Playgroud)
但我正在寻找这个结果:
data
index
2017-02-14 06:30:00 x1
2017-02-14 07:30:00 x2
2017-02-14 08:30:00 x3
2017-02-14 09:30:00 x4
2017-02-14 10:30:00 x5
Run Code Online (Sandbox Code Playgroud)
如何告诉函数在6:30以一小时为间隔开始分组?
如果无法通过.groupby(pd.TimeGrouper(freq = '60Min'))完成,那么最好的方法是什么?
向前致敬并非常感谢
我经常在关系数据库中的SQL中进行的一个查询是将表连接回自身,并根据相同id的记录在时间上向后或向前汇总每一行.
例如,假设table1为列'ID','Date','Var1'
在SQL中,我可以为过去3个月的每个记录加上var1,如下所示:
Select a.ID, a.Date, sum(b.Var1) as sum_var1
from table1 a
left outer join table1 b
on a.ID = b.ID
and months_between(a.date,b.date) <0
and months_between(a.date,b.date) > -3
Run Code Online (Sandbox Code Playgroud)
在熊猫队有什么办法吗?
我正在尝试使用Python和Pandas / NumPy 生成6个月滚动 Sharpe比率的图。
我的输入数据如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")
# Generate sample data
d = pd.date_range(start='1/1/2008', end='12/1/2015')
df = pd.DataFrame(d, columns=['Date'])
df['returns'] = np.random.rand(d.size, 1)
df = df.set_index('Date')
print(df.head(20))
returns
Date
2008-01-01 0.232794
2008-01-02 0.957157
2008-01-03 0.079939
2008-01-04 0.772999
2008-01-05 0.708377
2008-01-06 0.579662
2008-01-07 0.998632
2008-01-08 0.432605
2008-01-09 0.499041
2008-01-10 0.693420
2008-01-11 0.330222
2008-01-12 0.109280
2008-01-13 0.776309
2008-01-14 0.079325
2008-01-15 0.559206
2008-01-16 0.748133
2008-01-17 0.747319 …Run Code Online (Sandbox Code Playgroud) 我在弄清楚如何对大熊猫日期时间索引的数据帧进行重新采样时遇到麻烦,但是需要最小数量的值才能给出一个值。我想将每日数据重新抽样到每月,并要求至少存在90%的值才能产生值。
输入每日数据:
import pandas as pd
rng = pd.date_range('1/1/2011', periods=365, freq='D')
ts = pd.Series(pd.np.random.randn(len(rng)), index=rng)
ts['2011-01-01':'2011-01-05']=pd.np.nan #a short length of NANs to timeseries
ts['2011-10-03':'2011-10-30']=pd.np.nan #add ~ month long length of NANs to timeseries
Run Code Online (Sandbox Code Playgroud)
一月份只有几个NAN,但是十月份几乎是一个月的NAN,我想要每月重采样总和的输出:
ts.resample('M').sum()
Run Code Online (Sandbox Code Playgroud)
给出十月的NAN(丢失90%的每日数据)和一月份的NAN(丢失90%的数据),而不是当前输出:
2011-01-31 11.949479
2011-02-28 -1.730698
2011-03-31 -0.141164
2011-04-30 -0.291702
2011-05-31 -1.996223
2011-06-30 -1.936878
2011-07-31 5.025407
2011-08-31 -1.344950
2011-09-30 -2.035502
2011-10-31 -2.571338
2011-11-30 -13.492956
2011-12-31 7.100770
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这篇文章,使用滚动均值和min_periods; 我宁愿继续使用resample作为其直接的时间索引用途。这可能吗?我无法在重采样文档中找到很多内容或堆栈溢出来解决此问题。