我有一个数据框:
df
Date Close Open
0 2012-01-02 348.36 342.19
1 2012-01-03 355.23 350.24
2 2012-01-04 354.00 352.84
3 2012-01-05 352.23 352.12
4 2012-01-06 351.24 351.97
df
有14000行。
我想groupby
年月,并得到multiindex
数据框。
df['Date'] = pd.to_datetime(df['Date'])
# df.set_index('Date',inplace=True,drop=True)
df1 = df.groupby([df.Date.dt.year.rename('year'),df.Date.dt.month.rename('month')]).values
我尝试了.values
.count
(没有给出预期的输出)。
预期输出:
df1
year month Date Close Open
2012 1 2012-01-02 348.36 342.19
2012-01-03 355.23 350.24
2012-01-04 354.00 352.84
2012-01-05 352.23 352.12
2012-01-06 351.24 351.97
答案 0 :(得分:2)
使用set_index
:
df['Date'] = pd.to_datetime(df['Date'])
df1 = df.set_index([df.Date.dt.year.rename('year'),df.Date.dt.month.rename('month')])
类似于rename_axis
:
df1 = df.set_index([df.Date.dt.year,df.Date.dt.month]).rename_axis(['year','month'])
print (df1)
Date Close Open
year month
2012 1 2012-01-02 348.36 342.19
1 2012-01-03 355.23 350.24
1 2012-01-04 354.00 352.84
1 2012-01-05 352.23 352.12
1 2012-01-06 351.24 351.97
另一种解决方案(更详细):
df.index = pd.MultiIndex.from_arrays([df.Date.dt.year.rename('year'),
df.Date.dt.month.rename('month')])
df.index = pd.MultiIndex.from_arrays([df.Date.dt.year,
df.Date.dt.month], names=('year','month'))