作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 pandas 数据框中有一组经过计算的 OHLCVA 每日证券数据,如下所示:
>>> type(data_dy)
<class 'pandas.core.frame.DataFrame'>
>>> data_dy
Open High Low Close Volume Adj Close
Date
2012-12-28 140.64 141.42 139.87 140.03 148806700 134.63
2012-12-31 139.66 142.56 139.54 142.41 243935200 136.92
2013-01-02 145.11 146.15 144.73 146.06 192059000 140.43
2013-01-03 145.99 146.37 145.34 145.73 144761800 140.11
2013-01-04 145.97 146.61 145.67 146.37 116817700 140.72
[5 rows x 6 columns]
我正在使用以下字典和 pandas resample 函数将数据框转换为月度数据:
>>> ohlc_dict = {'Open':'first','High':'max','Low':'min','Close': 'last','Volume': 'sum','Adj Close': 'last'}
>>> data_dy.resample('M', how=ohlc_dict, closed='right', label='right')
Volume Adj Close High Low Close Open
Date
2012-12-31 392741900 136.92 142.56 139.54 142.41 140.64
2013-01-31 453638500 140.72 146.61 144.73 146.37 145.11
[2 rows x 6 columns]
这可以正确计算,但我想使用 Yahoo!每月数据的日期约定使用期间的第一个交易日而不是 pandas 使用的期间的最后一个日历日。
所以我希望答案是:
Volume Adj Close High Low Close Open
Date
2012-12-28 392741900 136.92 142.56 139.54 142.41 140.64
2013-01-02 453638500 140.72 146.61 144.73 146.37 145.11
我可以通过将每日数据转换为 python 列表、处理数据并将数据返回到数据框来实现这一点,但是如何使用 pandas 完成此操作?
最佳答案
您可以传递 MS
作为重采样规则,而不是 M
:
df =pd.DataFrame( range(72), index = pd.date_range('1/1/2011', periods=72, freq='D'))
#df.resample('MS', how = 'mean') # pandas <0.18
df.resample('MS').mean() # pandas >= 0.18
已更新为使用有关美国联邦假期的月份的第一个工作日:
df =pd.DataFrame( range(200), index = pd.date_range('12/1/2012', periods=200, freq='D'))
from pandas.tseries.offsets import CustomBusinessMonthBegin
from pandas.tseries.holiday import USFederalHolidayCalendar
bmth_us = CustomBusinessMonthBegin(calendar=USFederalHolidayCalendar())
df.resample(bmth_us).mean()
如果您想要使用数据中找到的最小月份来自定义月份的开始,请尝试此操作。 (它不是很漂亮,但它应该可以工作)。
month_index =df.index.to_period('M')
min_day_in_month_index = pd.to_datetime(df.set_index(new_index, append=True).reset_index(level=0).groupby(level=0)['level_0'].min())
custom_month_starts =CustomBusinessMonthBegin(calendar = min_day_in_month_index)
将custom_start_months
传给resample
的第一个参数
关于python - 使用每月的第一个交易日将每日 Pandas 股票数据转换为每月数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28126286/
我是一名优秀的程序员,十分优秀!