数据帧段的平均值

average on dataframe segments

在下图中,我的 DataFrame 在每个操作循环后呈现为零(循环具有随机长度)。我想计算每个补丁的平均值(或执行其他操作)。例如,单独 [0.762, 0.766] 的平均值,单独 [0.66, 1.37, 2.11, 2.29] 的平均值等等,直到 DataFrame 结束。

所以我使用了这些数据:

    random_value
0   0
1   0
2   1
3   2
4   3
5   0
6   4
7   4
8   0
9   1

可能有更好的解决方案,但这是我带来的:

def avg_function(df):
    avg_list = []
    value_list = list(df["random_value"])
    temp_list = []
    for i in range(len(value_list)):
        if value_list[i] == 0:
            if temp_list:
                avg_list.append(sum(temp_list) / len(temp_list))
                temp_list = []
        else:
            temp_list.append(value_list[i])
    if temp_list:  # for the last values
        avg_list.append(sum(temp_list) / len(temp_list))
    return avg_list

test_list = avg_function(df=df)
test_list

[Out] : [2.0, 4.0, 1.0]

编辑:由于在评论中要求,这里有一种方法可以将方法添加到数据框。我不知道是否有办法用 pandas 做到这一点(可能有!),但我想到了这个:

def add_mean(df, mean_list):
    temp_mean_list = []
    list_index = 0  # will be the index for the value of mean_list

    df["random_value_shifted"] = df["random_value"].shift(1).fillna(0)
    random_value = list(df["random_value"])
    random_value_shifted = list(df["random_value_shifted"])
   

    for i in range(df.shape[0]):
        if random_value[i] == 0 and random_value_shifted[i] == 0:
            temp_mean_list.append(0)
        elif random_value[i] == 0 and random_value_shifted[i] != 0:
            temp_mean_list.append(0)
            list_index += 1
        else:
            temp_mean_list.append(mean_list[list_index])
    df = df.drop(["random_value_shifted"], axis=1)
    df["mean"] = temp_mean_list
    return df

df = add_mean(df=df, mean_list=mean_list

哪个给了我:

df

[Out] :
    random_value    mean
0   0               0
1   0               0
2   1               2
3   2               2
4   3               2
5   0               0
6   4               4
7   4               4
8   0               0
9   1               1