我有一个 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 日,我想保留这个作为今年的最后一个条目。
如果行尚未排序,则按
Date
排序,即:
df = df.sort_values(by='Date')
按年份分组,只保留每组的第一个和最后一个元素:
df.groupby(pd.DatetimeIndex(df.Date).to_period('Y')).nth([0,-1])
使用问题中的示例数据框进行输出:
Date Open High Low Close Adj Close Volume
Date
2009 2009-12-31 31.709999 31.840000 31.299999 31.309999 23.547892 1957700
2010 2010-01-04 31.480000 31.840000 31.330000 31.469999 23.668222 3472500
2010 2010-01-07 31.549999 31.700001 31.049999 31.230000 23.487726 7232100
注意:如果每年只有一个条目,如示例 (2009) 所示,则该行将仅在输出中出现一次,而不是两次,但如果用于真实数据,则无论如何都不会成为问题。
假设您使用的是 pandas,IMO 是正确的选择,这是一个 pandas DataFrame。
我觉得最好的选择是首先按日期索引数据框。 然后您可以按索引对数据框进行排序。 这样您就可以轻松浏览各行并选择每个月的第一个和最后一个条目。
您还可以使用 pandas.DataFrame.loc 来搜索正确的条目。 如果您确切知道要寻找的日期,那么这可能是最好的方法。
您可以通过列出您想要数据的所有日期来解决此问题。 然后循环遍历列表并找到所有相应的条目并将它们存储在单独的数据框中。
我建议查看 pandas 的官方文档,尤其是 pandas.Dataframe