gpt4 book ai didi

python - 将具有多索引的每日数据框转换为季度数据框

转载 作者:行者123 更新时间:2023-12-01 00:21:43 25 4
gpt4 key购买 nike

我想将股票数据的每日数据框转换为季度数据框。但是,使用重新采样不起作用,因为我有一个多重索引,所以我希望我的最终季度数据框仍然包含个股(重新采样只是总结了所有这些股票):

import pandas as pd
dict1 = [
{'ticker':'jpm','date': '2016-11-27','returns': 0.2},
{'ticker':'jpm','date': '2016-11-28','returns': 0.2},
{'ticker':'ge','date': '2016-11-27','returns': 0.2},
{'ticker':'ge','date': '2016-11-28','returns': 0.2},
{'ticker':'amzn','date': '2016-11-27','returns': 0.2},
{'ticker':'amzn','date': '2016-11-28','returns': 0.2},
]
df1= pd.DataFrame(dict1)
df1['date'] = pd.to_datetime(df1['date'])
df1=df1.set_index(['date','ticker'], drop=True)

我的最终结果应该是:

Q42016 JPM  0.2
Q42016 GE 0.2
Q42016 AMZ 0.2

当我使用重新采样时,我得到:

Q42016  0.2

另外,我被 Pandas 0.18 困住了(长话短说)。如有任何帮助,我们将不胜感激。

最佳答案

第一个想法是通过将 ticker 转换为列来创建 DatetimeIndex,然后使用 groupbyresample :

df1 = df1.reset_index('ticker').groupby('ticker').resample('Q').mean()
print (df1)
returns
ticker date
amzn 2016-12-31 0.2
ge 2016-12-31 0.2
jpm 2016-12-31 0.2

另一个解决方案 Grouper :

df1 = df1.groupby([pd.Grouper(freq='Q', level='date'), 'ticker']).mean()
print (df1)
returns
date ticker
2016-12-31 amzn 0.2
ge 0.2
jpm 0.2
<小时/>

对于季度期间,请使用 assignto_period然后通过groupby聚合:

df1 = (df1.reset_index()
.assign(date = lambda x: x['date'].dt.to_period('Q'))
.groupby(['date','ticker'])
.mean())
print (df1)
returns
date ticker
2016Q4 amzn 0.2
ge 0.2
jpm 0.2

关于python - 将具有多索引的每日数据框转换为季度数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58908902/

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