【问题标题】:Grouping index by specified group size in Pandas在 Pandas 中按指定的组大小对索引进行分组
【发布时间】:2018-08-22 23:07:15
【问题描述】:

我有一个如下所示的数据框:

df = 
index    value1  value2  value3 
001         0.3     1.3     4.5
002         1.1     2.5     3.7
003         0.1     0.9     7.8
....
365         3.4     1.2     0.9

索引表示一年中的天数(所以有时索引的最后一个数字是 366),我想将它与随机天数(例如 10 天或 30 天)分组,我认为代码如下,

df_new = df.groupby(  "method"  ).mean()

在一些问题中,我看到他们使用 datetime 类型来分组,但是在我的数据框中,索引只是数字,有没有更好的分组方式?提前感谢!

【问题讨论】:

    标签: python pandas datetime group-by


    【解决方案1】:

    我认为需要下限指数值和总平均数:

    df_new = df.groupby( df.index // 10).mean()
    

    如果不是默认唯一数字索引的另一种通用解决方案:

    df_new = df.groupby( np.arange(len(df.index)) // 10).mean()
    

    示例

    c = 'val1 val2 val3'.split()
    df = pd.DataFrame(np.random.randint(10, size=(20,3)), columns=c)
    print (df)
        val1  val2  val3
    0      5     9     4
    1      5     7     1
    2      8     3     5
    3      2     4     2
    4      2     8     4
    5      8     5     6
    6      0     9     8
    7      2     3     6
    8      7     0     0
    9      3     3     5
    10     6     6     3
    11     8     9     6
    12     5     1     6
    13     1     5     9
    14     1     4     5
    15     3     2     2
    16     4     5     4
    17     3     5     1
    18     9     4     5
    19     9     8     7
    
    df_new = df.groupby( df.index // 10).mean()
    print (df_new)
       val1  val2  val3
    0   4.2   5.1   4.1
    1   4.9   4.9   4.8
    

    【讨论】:

    • 抱歉编辑问题,但第二种方法真的很有帮助,谢谢!
    【解决方案2】:

    只需通过底商运算符// 创建一个新索引并按此索引分组。这是一个有 155 行的示例。您可以删除结果的原始索引。

    df = pd.DataFrame({'index': list(range(1, 156)),
                       'val1': np.random.rand(155),
                       'val2': np.random.rand(155),
                       'val3': np.random.rand(155)})
    
    df['new_index'] = df['index'] // 10
    res = df.groupby('new_index', as_index=False).mean().drop('index', 1)
    
    #     new_index      val1      val2      val3
    # 0           0  0.315851  0.462080  0.491779
    # 1           1  0.377690  0.566162  0.588248
    # 2           2  0.314571  0.471430  0.626292
    # 3           3  0.725548  0.572577  0.530589
    # 4           4  0.569597  0.466964  0.443815
    # 5           5  0.470747  0.394189  0.321107
    # 6           6  0.362968  0.362278  0.415093
    # 7           7  0.403529  0.626155  0.322582
    # 8           8  0.555819  0.415741  0.525251
    # 9           9  0.454660  0.336846  0.524158
    # 10         10  0.435777  0.495191  0.380897
    # 11         11  0.345916  0.550897  0.487255
    # 12         12  0.676762  0.464794  0.612018
    # 13         13  0.524610  0.450550  0.472724
    # 14         14  0.466074  0.542736  0.680481
    # 15         15  0.456921  0.565800  0.442543
    

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 1970-01-01
      • 2017-08-17
      • 2016-10-22
      • 2023-03-20
      • 2014-04-13
      • 2023-01-31
      • 2021-04-30
      • 1970-01-01
      相关资源
      最近更新 更多