【问题标题】:average on dataframe segments数据帧段的平均值
【发布时间】:2021-11-02 10:17:03
【问题描述】:

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

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: pandas dataframe average segment


【解决方案1】:

所以我处理了这些数据:

    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]

编辑:由于在 cmets 中请求,这里是一种将手段添加到数据框的方法。我不知道是否有办法用 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

【讨论】:

  • 这真的很有帮助,我问更多问题会不会过分。我想将这些最终结果添加到数据框中的一列中,但对数据具有相同的索引。例如,随机值列中 1,2,3 的平均值 [2.0] 将位于索引 2,3,4 处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 2021-01-26
  • 2016-11-08
相关资源
最近更新 更多