分组后如何获取所有行的数据框?

时间:2019-02-07 13:55:49

标签: python pandas

我有一个数据框:

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 

1 个答案:

答案 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'))