我需要在 Pandas DateFrame
对象中按年或月分组,并返回一个带有新索引的新 DateFrame
对象。
这是我到目前为止的代码。 groupby
工作正常。
从 .csv 文件加载数据,将“Date”解析为日期格式(来自 finance.yahoo.com 的历史股票行情)。
In [23]: import pandas as pd
file = pd.read_csv("sdf.de.csv", parse_dates=['Date'])
file.head(2)
Out[23]:
Date Open High Low Close Volume Adj Close
0 2016-02-16 18.650 18.70 17.940 18.16 1720800 17.0600
1 2016-02-15 18.295 18.64 18.065 18.50 1463500 17.3794
按照“日期”升序排序文件,并将索引设置为Date
In [24]: daily = file.sort_values(by='Date').set_index('Date')
daily.head()
Out[24]:
Open High Low Close Volume Adj Close
Date
2000-01-03 14.20 14.50 14.15 14.40 277400 2.7916
2000-01-04 14.29 14.30 13.90 14.15 109200 2.7431
按月分组
我会对这些分组进行额外的apply()
操作,用于压缩特定分组的数据,例如查找年/月中最高的High
值或对Volume
值进行sum()
运算。此示例中省略了此步骤。
In [39]: monthly = daily.groupby(lambda x: (x.year, x.month))
monthly.first()
Out[39]:
Open High Low Close Volume Adj Close
(2000, 1) 14.200 14.500 14.150 14.400 277400 2.7916
(2000, 2) 13.900 14.390 13.900 14.250 287200 2.7625
... ... ... ... ... ... ...
(2016, 1) 23.620 23.620 23.620 23.620 0 22.1893
(2016, 2) 19.575 19.630 19.140 19.450 1783000 18.2719
这个方法能够运行,但是它会返回一个以元组为索引的 DateFrame
对象。
如果要按月份分组,期望得到的结果应该是一个全新的 DataFrame
对象,但是其 Date
索引应该是一个新的 DatetimeIndex
,格式可以是 %Y-%m
或者根据年份分组时只是 %Y
。
Out[39]:
Open High Low Close Volume Adj Close
Date
2000-01 14.200 14.500 14.150 14.400 277400 2.7916
2000-02 13.900 14.390 13.900 14.250 287200 2.7625
... ... ... ... ... ... ...
2016-01 23.620 23.620 23.620 23.620 0 22.1893
2016-02 19.575 19.630 19.140 19.450 1783000 18.2719
我感谢任何方向。