Подмножество Pandas MultiIndex DataFrame - PullRequest
0 голосов
/ 01 августа 2020

Итак, у меня есть некоторые данные, представленные в виде фрейма данных, который имеет некоторую информацию, которая меняется со временем, поэтому для времени t1 у меня есть фрейм данных df1, время t2 - некоторый фрейм данных df2, и т. Д. c. Теперь мне нужно связать их все вместе, как будто таблицы одна поверх другой последовательно во времени:

Я сохраняю их как словарь с

{ti:dfi}

Затем я объединяю их все как MultiIndex DataFrame, например:

new_frame = pd.concat(frame_list, axis=0)

Итак, я получаю такой кадр:

                                id          metric1     metric2...
2020-01-01 00:00:00 0           someid1     a1          f1      
                    1           someid2     b1          g1
                    2           someid3     c1          h1
                    3           someid4     d1          i1
                    4           someid5     e1          j1
                    ...                
2020-01-01 00:00:01 0           someid1     a2          f2
                    1           someid2     b2          g2
                    2           someid3     c2          h2
                    3           someid4     d2          i2
                    4           someid5     e2          j2
                    ...

Теперь я хочу выбрать какой-то идентификатор, например id1, Я хочу получить новую таблицу с метриками, меняющимися во времени

someid1:
                            metric1                 metric2                 ...         
2020-01-01 00:00:01         a1                      f1  
2020-01-01 00:00:02         a2                      f2                      ...                     
2020-01-01 00:00:03         a3                      f3                      ...     

Или даже, выбрав метрику c, а значения ее идентификаторов меняются во времени

metric1:
                            someid1                 someid2                 ...         
2020-01-01 00:00:01         a1                      b1  
2020-01-01 00:00:02         a2                      b2                      ...                     
2020-01-01 00:00:03         a3                      b3                      ...     

            

I Я могу рассуждать в своей голове, как это будет выглядеть с какой-то трехмерной матрицей, я бы получил все значения вдоль линии на оси глубины, но мне трудно перевести это в команды Pandas, если бы кто-нибудь мог помогите, я был бы признателен, не стесняйтесь предлагать лучшие решения проблемы также, может быть лучший способ сделать это, просто имейте в виду, что у меня есть много таблиц с некоторой меткой времени.

1 Ответ

0 голосов
/ 01 августа 2020

Существует несколько способов выбора строк из фрейма данных с помощью MultiIndex:

Сначала создайте несколько тестовых данных:

import numpy as np
import pandas as pd

n = 10
dates = pd.date_range(start='2019-12-26', periods=n, freq='D')
refs = [100 * i for i in range(n)]
midx = pd.MultiIndex.from_product([dates, refs])

data = np.arange(len(midx) * 3).reshape(len(midx), 3)
df = pd.DataFrame(data, index=midx, columns=['some_id', 'metric1', 'metric2'])

Теперь покажите несколько примеров индексации. Я предполагаю, что ваш фрейм данных проиндексирован по дате и времени и ID:

# select a range from the outer level of the multi index
df.loc['2020-01-01' : '2020-01-03']

# two ways to select from the inner level of a multi index
df.loc[(slice(None), 100), :]
df.loc[ pd.IndexSlice[:, 100], :]

MultiIndex мощный, но сложный. Документы здесь: https://pandas.pydata.org/docs/user_guide/advanced.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...