gpt4 book ai didi

python - 使用每月的第一个交易日将每日 Pandas 股票数据转换为每月数据

转载 作者:太空狗 更新时间:2023-10-30 01:58:26 26 4
gpt4 key购买 nike

我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com