首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算python中每n行数据的最大/分钟

计算python中每n行数据的最大/分钟
EN

Stack Overflow用户
提问于 2020-02-05 12:27:47
回答 2查看 2.5K关注 0票数 2

我想计算df的每n行的min/max,例如10,但是使用df.rolling(10).max()给出0-9、1-10、2-11等行的值。我想要0-9,10-19,20-29等等。

对于大型数据集,是否有一种简洁的方法可以做到这一点?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-02-05 12:33:10

使用np.arange计算0len (df) -1的数组,然后计算整个除数。我们可以将这个数组与DataFrame.groupby一起使用。

代码语言:javascript
运行
复制
n=9
df.groupby(np.arange(len(df))//n).max()

示例

设置

代码语言:javascript
运行
复制
df=pd.DataFrame({'A':range(30)})
print(df)
     A
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  10
11  11
12  12
13  13
14  14
15  15
16  16
17  17
18  18
19  19
20  20
21  21
22  22
23  23
24  24
25  25
26  26
27  27
28  28
29  29

溶液

代码语言:javascript
运行
复制
n=9
df_max = df.groupby(np.arange(len(df))//n).max()
print(df_max)
    A
0   8
1  17
2  26
3  29

如您所见,创建了从0到m的组。得到的DataFrame是每个组的最大值。

还可以选择要计算max的列。

代码语言:javascript
运行
复制
df.groupby(np.arange(len(df))//n)[cols].max()

当然,如果您想使用多个函数,请使用groupby.agg

细节

代码语言:javascript
运行
复制
np.arange(len(df))//n
#array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
#       2, 2, 2, 2, 2, 3, 3, 3])

编辑

代码语言:javascript
运行
复制
first_row = 2
df2 = df[first_row:]
df2.groupby(np.arange(len(df2))//n).max()
票数 3
EN

Stack Overflow用户

发布于 2020-02-05 12:36:11

成功的关键是按np.arange(len(df.index)) // 10分组(或将10 (组大小)更改为所需的任何其他值)。

假设有3列要计算min / max (“A”、“B”、“C”),则可以运行:

代码语言:javascript
运行
复制
df.groupby(np.arange(len(df.index)) // 10)[['A', 'B', 'C']].agg(['min', 'max'])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60075839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档