Разделить мультииндексный фрейм данных в фреймах данных по именам столбцов - PullRequest
2 голосов
/ 22 января 2020

У меня есть фрейм данных, подобный следующему: Многоиндексный фрейм данных по столбцам

Я хотел бы получить 3 фрейма данных, названных как каждый столбец (компас, аксел, гироскоп) с указателем времени нетронутый, и три столбца в каждом (df1, df2, df3).

Я пытался for index,row in df.iterrows():, но не мог заставить его работать, и я думал о том, как это правильно stack() и unstack(), но не Я действительно знаю как.

Ответы [ 2 ]

1 голос
/ 22 января 2020

groupby позволяет разделить DataFrame вдоль уровня MultiIndex с теми же значениями level_values. Мы будем использовать DataFrame.xs для удаления уровня индексации группы, оставляя только те столбцы, которые вам нужны. Отдельные DataFrames хранятся в словаре, снабженном уникальными значениями уровня 1 исходного столбца MultiIndex.

Пример данных

import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame(np.random.randint(1, 10, (4, 9)),
                  columns=pd.MultiIndex.from_product([['df1', 'df2', 'df3'],
                                                      ['compass', 'gyro', 'accel']]))
#      df1                df2                df3           
#  compass gyro accel compass gyro accel compass gyro accel
#0       3    3     7       2    4     7       2    1     2
#1       1    1     4       5    1     1       5    2     8
#2       4    3     5       8    3     5       9    1     8
#3       4    5     7       2    6     7       3    2     9

Код

d = {idx: gp.xs(idx, level=1, axis=1) for idx,gp in df.groupby(level=1, axis=1)}
d['gyro']
#   df1  df2  df3
#0    3    4    1
#1    1    1    2
#2    3    3    1
#3    5    6    2

Поскольку такие разбиения легко доступны с groupby, вам может даже не потребоваться хранить отдельные кадры данных; Вы можете управлять каждым из них отдельно с помощью GroupBy.apply.

1 голос
/ 22 января 2020

Вы можете сохранить 3 первых столбца в файле CSV и повторить процесс более 2 раз для других файлов CSV ...

Вы можете выбрать 3 столбца для вашего кадра данных, например:

x = 0
data=pd.read_csv(file.csv, keep_default_na=False, skiprows=line_header, na_filter=False, usecols=[x,x+1,x+2])[[compass, accel, gyro]])

где x = ваш первый столбец «большого фрейма данных»

свойство usecols действительно полезно в этом случае

Подробнее об этом можно прочитать в: Pandas .read_csv

...