Зацикливаться и выбирать строки по подмножеству мультииндекса - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть фрейм данных с несколькими индексами, и я хочу зациклить этот фрейм данных, вытаскивая группы строк для обработки.

Я хочу перебрать все комбинации в мультииндексе, но для подмножества индекса, а не для всех. Я заранее не знаю, какими будут значения ключа / индекса, но я знаю, сколько их.

Например:

                  data1
key1  key2  key3
A     A     A      10
A     A     B      11
A     B     A      12
A     B     C      13
A     C     A      14

Предположим, меня интересует только key1 + key2.

Существует 3 уникальные комбинации key1 + key2:

(A A)
(A B)
(A C)

Первый раз в цикле я хотел бы извлечь:

                  data1
key1  key2  key3
A     A     A      10
A     A     B      11

Второй раз в цикле я хотел бы извлечь:

                  data1
key1  key2  key3
A     B     A      12
A     B     C      13

В третий раз за цикл я хотел бы извлечь:

                  data1
key1  key2  key3
A     C     A      14

Как мне это сделать? Я ПОЛНЫЙ новичок на питоне, поэтому чем больше объяснений, тем лучше.

Спасибо

** РЕДАКТИРОВАТЬ В ОТВЕТ НА КОММЕНТАРИЙ НИЖЕ **

В псевдо-коде я изначально думал что-то вроде:

[1] groups = <get the set/list of unique key1+key2 groups in the main dataframe>

[2] for each group in groups

[3]       df_thisGroup = <extract the rows of data for this group from the main dataframe>

[4]      <process df_thisGroup, and save the results out into a new dataframe.  No need to alter the main dataframe>

[5]      <optional: remove this group from the main dataframe as we no longer need it, we have finished processing it.  This might make processing later groups faster?>

[6] move to next group

Мой вопрос: как выполнить шаги [1] и [2] & [3]

1 Ответ

0 голосов
/ 05 ноября 2018

Вам нужно подумать о том, как вы собираетесь хранить свои кадры данных. Я бы порекомендовал словарь. Чтобы заполнить свой словарь, вы можете использовать groupby с аргументом level, установленным для ваших ключей интереса.

keys = ['key1','key2']

dfs = {f'df{i}': data for i, (g,data) in enumerate(df.groupby(level=keys))}

Здесь вы сгруппировали по key1 и key2, а затем создаете словарь, в котором хранится информационный кадр для каждой комбинации этих клавиш. Они будут помечены df0, df1 и т. Д. Вы можете просмотреть все созданные вами кадры данных с помощью:

>>> dfs.keys()
dict_keys(['df0', 'df1', 'df2'])

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

>>> dfs['df0']
                data1
key1 key2 key3       
A    A    A        10
          B        11

>>> dfs['df1']
                data1
key1 key2 key3       
A    B    A        12
          C        13

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