DateFrame
我需要一些指导来按年或月对 Pandas 对象进行分组,并获得一个DateFrame
带有新索引的新对象。到目前为止,这是我的代码。groupby
按预期工作。
从 .csv 文件加载数据,将“日期”解析为日期格式(来自 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
年/月的最高值或sum()
值Volume
。本例省略此步骤。
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
我很感谢任何指示。