#pandas #dataframe #average #segment
Вопрос:
На следующем рисунке у меня есть фрейм данных, который отображает ноль после каждого цикла работы (цикл имеет случайную длину). Я хочу рассчитать среднее значение (или выполнить другие операции) для каждого патча. Например, среднее значение [0.762, 0.766]
одиночества, [0.66, 1.37, 2.11, 2.29]
одиночества и так далее до конца кадра данных.
Комментарии:
1. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.
Ответ №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]
Изменить: поскольку запрошено в комментариях, вот способ добавить средства в фрейм данных. Я не знаю, есть ли способ сделать это с пандами (и может быть!), Но я придумал это :
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.0] , среднее значение которого составляет 1,2,3 в столбце случайных значений, будет иметь индекс 2,3,4.