Я хочу сделать среднее значение для столбца, но хочу, чтобы средние значения были помещены в новый столбец с пандами.

Я хочу перейти из этого формата:

values
10
5
8
7
2
5
6
7

К этому формату:

values  average
10  nan
5   7.5
8   6.5
7   7.5
2   4.5
5   3.5
6   5.5
7   6.5

Здесь есть решение для чего-то похожего: Усреднение каждые два последовательные значения индекса (каждые 2 минуты) в панде dataframe, но я хочу сохранить одинаковое количество строк.

3
Adrian 11 Апр 2019 в 16:37

2 ответа

Лучший ответ

В другом решении значения заменяют рассматриваемый столбец. Я хочу поместить их в новую колонку. Тем временем мне удается найти решение благодаря Полу Х:

df = pd.DataFrame({'values': [10, 5, 8, 7, 2, 5, 6, 7]})
df["average"] = df["values"].rolling(2).mean()
print(df)

Выход:

   values  average
0      10      NaN
1       5      7.5
2       8      6.5
3       7      7.5
4       2      4.5
5       5      3.5
6       6      5.5
7       7      6.5
2
Adrian 11 Апр 2019 в 15:17

Для этого вы можете использовать pd.Series.rolling (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html ) :

data = pd.Series([10, 5, 8, 7, 2, 5, 6, 7])
print(data.rolling(2).mean())

Выход:

0    NaN
1    7.5
2    6.5
3    7.5
4    4.5
5    3.5
6    5.5
7    6.5
dtype: float64
3
mrzo 11 Апр 2019 в 13:43