Python 重新采样每日数据以获得每月数据帧?
我有一个每天的数据帧,我正试图重新采样,以获得每月的开盘高低点收盘 我试过:Python 重新采样每日数据以获得每月数据帧?,python,pandas,Python,Pandas,我有一个每天的数据帧,我正试图重新采样,以获得每月的开盘高低点收盘 我试过: df2 = df_daily.resample('M',convention='end').asfreq() 这给了我一个只有收盘值的数据框,即如果日期正好是月底,则为开盘价-高-低-收盘价的第30个值 这导致了我假设为特定月份的开盘价-高-低-收盘价的平均值 我希望从有价格的月份的第一天开始开盘,高是该月的最高值,低是该月的最低值,接近实际收盘 我相信我可以用min-max以不同的方式在熊猫身上做到这一点,但我只是
df2 = df_daily.resample('M',convention='end').asfreq()
这给了我一个只有收盘值的数据框,即如果日期正好是月底,则为开盘价-高-低-收盘价的第30个值
这导致了我假设为特定月份的开盘价-高-低-收盘价的平均值
我希望从有价格的月份的第一天开始开盘,高是该月的最高值,低是该月的最低值,接近实际收盘
我相信我可以用min-max以不同的方式在熊猫身上做到这一点,但我只是想知道是否可以使用重采样来做到这一点
预期df
Open High Low Close
Date
2010-01-29 55.15 60.3 45.6 51.7
谢谢无论列日期如何,按月重新采样都会考虑月的最后一天
df2 = df_daily.resample('M').agg({'Open':'first', 'High':'max',
'Low': 'min', 'Close':'last'})
输出:
Open High Low Close
Date
2010-01-31 55.15 60.3 45.6 51.70
2010-02-28 51.80 54.1 50.5 51.95
您可以将索引更改为列中的最后一天:
df2 = df_daily.resample('M').agg({'Open':'first', 'High':'max',
'Low': 'min', 'Close':'last'})
idx = df_daily.reset_index().groupby(df_daily.index.to_period('M'))['Date'].idxmax()
df2.index = df_daily.iloc[idx].index
print(df2)
Output:
Open High Low Close
Date
2010-01-29 55.15 60.3 45.6 51.70
2010-02-03 51.80 54.1 50.5 51.95
如果您只想按年份和月份分组,请使用:
df3 = df_daily.groupby([df_daily.index.year,df_daily.index.month]).agg({'Open':'first',
'High':'max', 'Low': 'min', 'Close':'last'})
df3.index.names= ['Year', 'Month']
print(df3)
Output:
Open High Low Close
Year Month
2010 1 55.15 60.3 45.6 51.70
2 51.80 54.1 50.5 51.95
你能发布你的预期输出吗df@pyd,编辑了问题。如果希望日期的格式为YYYY-MM,则只需执行df2.reset_index和df2[Date]=df2[Date].dt.strftime%Y-%m即可。
df2 = df_daily.resample('M').agg({'Open':'first', 'High':'max',
'Low': 'min', 'Close':'last'})
idx = df_daily.reset_index().groupby(df_daily.index.to_period('M'))['Date'].idxmax()
df2.index = df_daily.iloc[idx].index
print(df2)
Output:
Open High Low Close
Date
2010-01-29 55.15 60.3 45.6 51.70
2010-02-03 51.80 54.1 50.5 51.95
df3 = df_daily.groupby([df_daily.index.year,df_daily.index.month]).agg({'Open':'first',
'High':'max', 'Low': 'min', 'Close':'last'})
df3.index.names= ['Year', 'Month']
print(df3)
Output:
Open High Low Close
Year Month
2010 1 55.15 60.3 45.6 51.70
2 51.80 54.1 50.5 51.95