#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:
Попробуй это —
- Распакуйте, чтобы получить столбцы x, y в качестве индексов
- сгруппируйте данные по обоим уровням [x,y] и [1,2] и рассчитайте дисперсию.
- Распакуйте и транспонируйте, чтобы получить [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,23. распечатайте
df.unstack()
отдельно, и станет ясно, о каких уровнях я говорю.