Python数据帧每日数据获取每年的第一天和最后一天

2024-04-18 18:37:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python pandas数据框架,其中包含每日数据,如下所示:

            Date       Open       High        Low      Close  Adj Close   Volume
0     2009-12-31  31.709999  31.840000  31.299999  31.309999  23.547892  1957700
1     2010-01-04  31.480000  31.840000  31.330000  31.469999  23.668222  3472500
2     2010-01-05  31.549999  31.770000  31.400000  31.639999  23.796082  3458700
3     2010-01-06  31.600000  31.889999  31.430000  31.559999  23.735907  3745800
4     2010-01-07  31.549999  31.700001  31.049999  31.230000  23.487726  7232100

如何保存每年的第一个和最后一个条目?如果一年的最后一个条目是10月31日,我想把这个条目作为这一年的最后一个条目


Tags: 数据框架pandasclosedate条目openlow
2条回答

假设您使用的是pandas,在这里哪个IMO是正确的选择,这是一个pandas数据帧

我觉得最好的选择是首先按日期索引数据帧。 然后可以按索引对数据帧进行排序。 这样,您就可以轻松地浏览各行并为每个月选择第一个和最后一个条目

您还可以使用pandas.DataFrame.loc搜索正确的条目。 如果你确切地知道你要找的日期,那么这可能是最好的方法

您可以通过列出所有需要数据的日期来实现这一点。 然后循环遍历列表,找到所有对应的条目,并将它们存储在单独的数据框中

我建议浏览official documentation for pandas,尤其是pandas.Dataframe

  1. Date排序,如果行尚未按排序顺序排序,例如:

    df = df.sort_values(by='Date')

  2. 按年份分组,仅保留每组的第一个和最后一个元素:

    df.groupby(pd.DatetimeIndex(df.Date).to_period('Y')).nth([0,-1])

使用问题中的示例数据框输出:

     Volume        Date       Open       High        Low    Close        Adj
Date                                                                        
2009      0  2009-12-31  31.709999  31.840000  31.299999  1957700  23.547892
2010      1  2010-01-04  31.480000  31.840000  31.330000  3472500  23.668222
2010      4  2010-01-07  31.549999  31.700001  31.049999  7232100  23.487726

注意:如果像示例(2009)中那样每年只有一个条目,那么该行将只在输出中出现一次,而不是两次,但如果在实际数据中使用,则无论如何都不会成为问题

相关问题 更多 >