首页 > 解决方案 > DataFrame中n个连续值的最大平均值

问题描述

我想在 DataFrame 中找到 n 个连续值的最大平均值

import pandas as pd

list1 = [120, 130, 135, 140, 170, 131, 131, 151, 181, 191, 200, 210, 220, 170, 160, 151, 120, 140, 170, 173]
list2 = [80, 81, 82, 82, 82, 83, 84, 84, 85, 85, 85, 86, 87, 88, 89, 90, 90, 90, 91, 91 ]

df = pd.DataFrame(zip(list1, list2), columns=['value1', 'value2'])
df['interval'] = 0

interval_duration = 3 # set interval duration
number_of_intervals = 4 # set number of intervals

# I found only a way with for loop:
for x in range(1, number_of_intervals + 1):
    max_average_interval = sum(df['value1'][0 : interval_duration]) / interval_duration
    item_max = 0
    for item in range(len(df['value1']) - interval_duration + 1):
        if sum(df['interval'].loc[item : item + interval_duration - 1]) == 0:
            if max_average_interval < sum(df['value1'][item : item + interval_duration]) / interval_duration:
                max_average_interval = sum(df['value1'][item : item + interval_duration]) / interval_duration
                item_max = item

    df['interval'].loc[item_max : item_max + interval_duration - 1] = x

结果:

    value1  value2  interval
0   120 80  0
1   130 81  0
2   135 82  0
3   140 82  0
4   170 82  0
5   131 83  0
6   131 84  0
7   151 84  2
8   181 85  2
9   191 85  2
10  200 85  1
11  210 86  1
12  220 87  1
13  170 88  4
14  160 89  4
15  151 90  4
16  120 90  0
17  140 90  3
18  170 91  3
19  173 91  3

其中在间隔列中: 1 - 连续值的第一个最大间隔 2 - 连续值的第二个最大间隔,依此类推。

问题。如果有更有效的方法来做到这一点?这很重要,因为我可以有成千上万个值。

更新

又更新了。。

标签: pythonpandasdataframe

解决方案


推荐阅读