【发布时间】:2020-05-21 08:53:07
【问题描述】:
我想计算 df 的每 n 行的最小值/最大值,比如 10,但是使用 df.rolling(10).max() 会给出 0-9、1-10、2-11 行的值等等。我想要 0-9、10-19、20-29 等等
对于大型数据集是否有一种简洁的方法?
谢谢
【问题讨论】:
标签: python pandas dataframe max min
我想计算 df 的每 n 行的最小值/最大值,比如 10,但是使用 df.rolling(10).max() 会给出 0-9、1-10、2-11 行的值等等。我想要 0-9、10-19、20-29 等等
对于大型数据集是否有一种简洁的方法?
谢谢
【问题讨论】:
标签: python pandas dataframe max min
成功的关键是按 np.arange(len(df.index)) // 10 分组(或更改 10(组大小)到您需要的任何其他值)。
假设您有 3 列来计算最小值/最大值(['A', 'B', 'C']), 你可以运行:
df.groupby(np.arange(len(df.index)) // 10)[['A', 'B', 'C']].agg(['min', 'max'])
【讨论】:
len(df) 更改为 len (df.index) 请不要复制解决方案
使用np.arange
计算0 到len (df) -1 的数组,然后计算整个除法。我们可以将此数组与DataFrame.groupby 一起使用。
n=9
df.groupby(np.arange(len(df))//n).max()
设置
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
解决方案
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
df.groupby(np.arange(len(df))//n)[cols].max()
如果你想使用多个功能,当然可以使用groupby.agg
详情
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])
编辑
first_row = 2
df2 = df[first_row:]
df2.groupby(np.arange(len(df2))//n).max()
【讨论】: