在Pandas中按指定的组大小对索引进行分组

时间:2018-03-14 12:07:32

标签: python pandas datetime group-by

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

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的类型,但是在我的数据框中,索引只是数字,有没有更好的方法来分组呢?谢谢你!

2 个答案:

答案 0 :(得分:2)

我认为需要楼层指数值和汇总均值:

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

答案 1 :(得分:1)

只需通过floored商运算符//创建一个新索引,然后按此索引进行分组。这是一个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
相关问题