#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')}