我有一个带有日期时间索引的熊猫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。
提前致谢
答案 0 :(得分:1)
我认为您需要按to_period
将DatetimeIndex
转换为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])
。
将gt
与sub
联合起来需要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]