У меня есть набор данных, где есть матрица числовых значений, индексированных переменной времени. Каждая матрица представляет собой массив numpy (который может быть преобразован в фрейм данных с столбцами, соответствующими столбцам матрицы). если у меня есть эти матрицы, как я могу сделать их в единый файл данных, где каждая матрица имеет индекс времени? а именно:создание мультииндекса в pandas dataframes в Python?
# time t1
d1 = pandas.DataFrame({"a": [1,2,3,4], "b":[10,20,30,40]})
# time t2
d2 = pandas.DataFrame({"a": [10,20,30,40], "b": [1,2,5,6]})
# time t3
d3 = ...
я хочу сделать индекс с именем «время» индексировать эти dataframes, а затем агрегированные значения из столбцов «а» и «б» через индекс времени. как вы можете это сделать в пандах?
моя попытка:
d=pandas.DataFrame([d1,d2],index=(0, 1),columns=["time"])
обновление: решение unutbu для добавления двух иерархических столбцов:
c = pd.concat([d1, d2], keys=[('t1', 'p1'), ('t2', 'p2')], names=['time', 'position'])
мой последний вопрос, как получить доступ к этой структуре в результате? например, как вы выполняете векторизованные операции через time
или через position
? например, взять среднее число строк для каждого значения time
.
также, как это соотносится с кодировкой time
и position
в каждом информационном кадре и с использованием groupby
? другими словами, когда использовать уровни против плоских столбцов, которые сгруппированы? вот альтернативное решение с использованием плоских dataframe с GroupBy:
d1["time"] = 1
d1["position"] = "x"
d2["time"] = 2
d2["position"] = "y"
c = pandas.concat([d1, d2])
# take mean for all time values
c.groupby("time").apply(lambda x: np.mean(x, axis=1))
@ VidhyaG: имеет смысл обратиться к ответу и подробно остановиться на вопросе. это часто делается – lgd