我正在尝试使用Pandas创建交易日历.我能够基于USFederalHolidayCalendar创建一个cal实例.USFederalHolidayCalendar与交易日历不一致,因为交易日历不包括哥伦布日和退伍军人日.但是,交易日历包括耶稣受难日(不包括在USFederalHolidayCalendar中).以下代码中除最后一行之外的所有内容都有效:
from pandas.tseries.holiday import get_calendar, HolidayCalendarFactory, GoodFriday
from datetime import datetime
cal = get_calendar('USFederalHolidayCalendar') # Create calendar instance
cal.rules.pop(7) # Remove Veteran's Day rule
cal.rules.pop(6) # Remove Columbus Day rule
tradingCal = HolidayCalendarFactory('TradingCalendar', cal, GoodFriday)
Run Code Online (Sandbox Code Playgroud)
tradeCal实例似乎可以工作,因为我可以查看Holiday规则.
In[10]: tradingCal.rules
Out[10]:
[Holiday: Labor Day (month=9, day=1, offset=<DateOffset: kwds={'weekday': MO(+1)}>),
Holiday: Presidents Day (month=2, day=1, offset=<DateOffset: kwds={'weekday': MO(+3)}>),
Holiday: Good Friday (month=1, day=1, offset=[<Easter>, <-2 * Days>]),
Holiday: Dr. Martin Luther King Jr. (month=1, day=1, offset=<DateOffset: kwds={'weekday': MO(+3)}>),
Holiday: New Years Day (month=1, …Run Code Online (Sandbox Code Playgroud) 当控制台配置为使用IPython时,PyCharm Python控制台中的响应时间无法忍受.在之前的安装中并非如此.当Python控制台未配置为使用IPython并使用IDLE时,它会正常执行.
响应时间差似乎与REPL响应功能有关,如下图所示.REPL响应对话框完成后,后台进程将继续运行几分钟.
由于这在以前的安装中不是问题,因此问题必须是配置更改的结果.然而,我唯一改变的是使用Conda env而不是virtualenv.
有任何想法吗?
我是一个蟒蛇新手,所以我希望我的两个问题清晰完整.我在下面以csv格式发布了实际代码和测试数据集.
我已经能够使用Newton-Raphson方法构造以下代码(主要是在StackOverflow贡献者的帮助下)来计算期权合约的隐含波动率.该过程在确定隐含波动率时计算Vega.虽然我可以使用Pandas DataFrame apply方法为Implied Volatility创建一个新的DataFrame列,但我无法为Vega创建第二列.当函数将IV和Vega一起返回时,有没有办法创建两个单独的DataFrame列?
我试过了:
return iv, vega 从功能df[['myIV', 'Vega']] = df.apply(newtonRap, axis=1)ValueError: Shape of passed values is (56, 2), indices imply (56, 13)还尝试过:
return iv, vega 从功能df['myIV'], df['Vega'] = df.apply(newtonRap, axis=1)ValueError: Shape of passed values is (56, 2), indices imply (56, 13)另外,计算过程很慢.我导入了numba并实现了@jit(nogil = True)装饰器,但我只看到了25%的性能提升.测试数据集的性能测试有近900,000条记录.运行时间为2小时9分钟,没有numba或numba,但没有nogil = True.使用numba和@jit(nogil = True)的运行时间是1小时32分钟.我可以做得更好吗?
from datetime import datetime
from math import sqrt, pi, log, exp, isnan
from scipy.stats import norm
from numba import jit
# dff …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过从另一个列中减去现有的dataframe列列来创建新的pandas dataframe列.但是,如果结果为负数,则新列值应设置为零.
import pandas as pd
data = {'A': [1,2,3], 'B': [3,2,1]}
df = pd.DataFrame(data)
In [4]: df
Out[4]:
A B
0 1 3
1 2 2
2 3 1
Run Code Online (Sandbox Code Playgroud)
如果我通过从'A'中减去'B'来创建一个新的数据帧列'C',我会得到正确的结果.
df['C'] = df['A'] - df['B']
In[8]: df
Out[7]:
A B C
0 1 3 -2
1 2 2 0
2 3 1 2
Run Code Online (Sandbox Code Playgroud)
但是,如果我利用max()函数来避免带负数的结果,我会得到"ValueError:系列的真值是模棱两可的".
>>> df['C'] = max(df['A'] - df['B'], 0)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). …Run Code Online (Sandbox Code Playgroud)