【问题标题】:Group data in pandas dataframe for every n years每 n 年在 pandas 数据框中对数据进行分组
【发布时间】:2017-06-24 02:29:26
【问题描述】:

我在数据框中有按年份分组的数据。我有一列,其中有年份,后面是这些年份的各个列中的数据。是否可以每五年对数据进行分组?

Year Column 
1991   2
1992   3
1993   5
1994   7
1995   8
1996   9
1997   7

我需要将 1991 年至 1995 年的数据归为一组,将 1996 年至 1997 年的数据归为一组,并取这些值的平均值。如何执行这个 groupby 操作?

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    如果标签无关紧要,总是可以转换为更有意义的值,如1991-1995,你可以这样做:

    df.Column.groupby(df.Year.sub(1991)//5).mean()
    
    #Year
    #0    5
    #1    8
    #Name: Column, dtype: int64
    

    【讨论】:

      【解决方案2】:

      只需使用df.groupby(df.index//5).mean()

      In [21]: df
      Out[21]: 
         Year  Column
      0  1991       2
      1  1992       3
      2  1993       5
      3  1994       7
      4  1995       8
      5  1996       9
      6  1997       7
      
      In [22]: df.groupby(df.index//5).mean()
      Out[22]: 
         Column
      0       5
      1       8
      

      【讨论】:

        【解决方案3】:

        您可以在这里使用剪切功能:

        your_data_frame.groupby(pd.cut(your_data_frame["Year"], np.arange(0, 1991, 1995)))
        

        【讨论】:

          【解决方案4】:

          您可以使用groupby by numpy.arange 进行楼层划分并通过agg - mean 聚合,对于年份范围还可以使用firstlast

          mapinsert 列中的MultiIndex 删除到astype 的第一个位置,最后drop 删除列:

          print (np.arange(len(df.index))//5)
          [0 0 0 0 0 1 1]
          
          df1 = df.groupby(np.arange(len(df.index))//5).agg({'Column':'mean','Year':['first', 'last']})
          df1.columns = df1.columns.map('_'.join)
          df1.insert(0, 'Years', df1['Year_first'].astype(str) + '-' + df1['Year_last'].astype(str))
          #instead insert if is not necessary first position of column
          #df1['Years'] = df1['Year_first'].astype(str) + '-' + df1['Year_last'].astype(str)
          df1.drop(['Year_first','Year_last'], axis=1, inplace=True)
          print (df1)
                 Years  Column_mean
          0  1991-1995            5
          1  1996-1997            8
          

          【讨论】:

            猜你喜欢
            • 2019-04-17
            • 1970-01-01
            • 2021-06-03
            • 1970-01-01
            • 1970-01-01
            • 2022-11-27
            • 1970-01-01
            • 2020-05-07
            • 2022-12-09
            相关资源
            最近更新 更多