поддержание индекса pandas df с помощью selection

#python #pandas #dataframe #indexing #pandas-groupby

#питон #панды #фрейм данных #индексация #панды-групповые

Вопрос:

У меня возникла проблема с возвратом исходного индекса df строки с учетом условия groupby после повторного выбора некоторых df. Это легче понять с помощью кода. Итак, если мы начнем с игрушечного фрейма данных:

 headers = ['a','b'] nrows = 8 df = pd.DataFrame(columns = headers) df['a'] = [0]*(nrows//2)   [1]*(nrows//2) df['b'] = [2]*(nrows//4)   [4]*(nrows//4)   [2]*(nrows//4)   [4]*(nrows//4) print(df)  

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

 sub_df = df[df['a']==1] ## selects for only group 1 (indices 4-7) print(sub_df.index) ## looks good so far   

sub_df.индекс возвращает

Int64Index([4, 5, 6, 7], dtype=’int64′)

Что кажется замечательным! Я хотел бы сгруппировать данные из этого подмножества и извлечь исходный индекс df, и именно здесь возникает проблема: например:

 g_df = sub_df.groupby('b') g_df_idx = g_df.indices  print(g_df_idx) ## bad!  

когда я печатаю(g_df_idx) Я хочу, чтобы он вернулся:

{2: массив([4,5]), 4: массив([6,7])}

Из-за того, как я буду использовать этот код, я не могу просто группироваться([‘a’,’b’])

Я схожу с ума от этой штуки. Вот некоторые из многих решений, которые я пробовал:

  ## 1  e1_idx = sub_df.groupby('b').indices # print(e1_idx) ## issue persists  ## 2 e2 = sub_df.groupby('b', as_index = True) ## also tried as_index = False  e2_idx = e2.indices  # print(e2_idx) ## issue persists  ## 3 e3 = sub_df.reset_index() e3_idx = e3.groupby('b').indices # print(e3_idx) ## issue persists   

Я уверен, что должно быть какое-то простое решение, которое я просто упускаю из виду. Был бы очень признателен за любой совет.

Ответ №1:

ты можешь сделать вот так

 g_df_idx = g_df.apply(lambda x: x.index).to_dict() print(g_df_idx) # {2: Int64Index([4, 5], dtype='int64'), 4: Int64Index([6, 7], dtype='int64')}