代码之家  ›  专栏  ›  技术社区  ›  Sid

如何得到分组后所有行的数据帧?

  •  1
  • Sid  · 技术社区  · 6 年前

    我有一个数据框:

    东风

        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 回复  |  直到 6 年前
        1
  •  2
  •   jezrael    6 年前

    使用 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'))