Pandas从日期时间索引组循环

时间:2017-09-25 09:27:14

标签: python pandas numpy

我有一个带有日期时间索引的熊猫df。我想基于索引日期值(不同时间段的不同警示)循环使用具有不同警示值的以下代码。这是我的代码,它产生了我在整个时间序列中的1次攻击:

import pandas as pd
import numpy as np

index=pd.date_range('2017-10-1 00:00:00', '2018-12-31 23:50:00', freq='30min')
df=pd.DataFrame(np.random.randn(len(index),2).cumsum(axis=0),columns=['A','B'],index=index)

strike = 40
payoffs = df[df>strike]-strike
mean_payoff = payoffs.fillna(0).mean()
dist = mean_payoff.describe(percentiles=[0.05,.5,.95])

print(dist)    

我想根据时间段(索引值)使用strike的不同值。

到目前为止,我尝试创建一个分类计算列,目的是使用map或在df上应用row wise。我也玩过创建字典并在df上映射字典。 即使我得到的计算列具有正确的打击值,我也无法考虑如何从所有其他列中减去计算出的列值(打击)以从上方获取payoffs

我觉得我需要使用for循环并可能创建一组日期块,这些日期块在循环结束时附加在一起,可能使用pd.concat。

提前致谢

2 个答案:

答案 0 :(得分:1)

我认为您需要按to_periodDatetimeIndex转换为quarter句号,然后按string转换为dict并将map转换为d = {'2017Q4':30, '2018Q1':40, '2018Q2':50, '2018Q3':60, '2018Q4':70} strike = df.index.to_series().dt.to_period('Q').astype(str).map(d) payoffs = df[df.gt(strike, 0)].sub(strike, 0) mean_payoff = payoffs.fillna(0).mean() dist = mean_payoff.describe(percentiles=[0.05,.5,.95])

gtsub联合起来需要Oracle Java Tutorials

$ awk '{a[$1]++} END{for (i in a) print i, a[i]}' input.txt | 
  sort -nr -k2 | 
  head -n5

答案 1 :(得分:0)

将数据框索引映射到字典可以作为起点。

a = dict()
a[2017]=30
a[2018]=40
ranint = random.choices([30,35,40,45],k=21936)
#given your index used in example
df = pd.DataFrame({values:ranint},index=index)



                      values  year  strick
2017-10-01 00:00:00      30  2017      30
2017-10-01 00:30:00      30  2017      30
2017-10-01 01:00:00      45  2017      30

df.year = df.index.year
index.strike = df.year.map(a)
df.returns = df.values - df.strike

然后你可以提取大于0的回报:

df[df.returns>0]
相关问题