Как рассчитать дисперсию фрейма данных в этом формате?

#python #pandas #dataframe

Вопрос:

Здесь у меня есть упрощенный фрейм данных (реальный в том же формате, но только усиленный).

 import pandas as pd
import numpy as np

row = (1, 2)
columns = ["x", "y", "x", "y", "x", "y", "x", "y"]
data = ([10, 2, 8, 1.5, 9, 2, 11, 1.6], [8, 3, 7.5, 2.2, 9, 2, 8.6, 2.3])

df = pd.DataFrame(data, index = row, columns = columns)
 

введите описание изображения здесь

Я хочу рассчитать дисперсию x, y для обоих значений 1, 2, и идеальным форматом является

введите описание изображения здесь

Мы будем признательны за любую подсказку или помощь

Ответ №1:

Попробуй это —

  1. Распакуйте, чтобы получить столбцы x, y в качестве индексов
  2. сгруппируйте данные по обоим уровням [x,y] и [1,2] и рассчитайте дисперсию.
  3. Распакуйте и транспонируйте, чтобы получить [x,y] в виде столбцов.
 df.unstack().groupby(level=[0,1]).var().unstack().T
 
           x         y
1  1.666667  0.069167
2  0.435833  0.189167
 

Комментарии:

1. сначала спасибо. Могу я спросить, что означает ваш «уровень = [0, 1]»?

2. таким образом, у вас уже есть 1,2 в качестве индекса. При использовании unstack вы получаете столбцы [x,y], которые также становятся индексами. поэтому для группировки по массиву с несколькими индексами вы упомянули,что хотите, чтобы группа находилась на уровнях 0, который равен x, y, и на уровнях 1, который равен 1,2

3. распечатайте df.unstack() отдельно, и станет ясно, о каких уровнях я говорю.