Python Pandas groupby на основе другого фрейма данных

#python #pandas #pandas-groupby

#питон #панды #панды-групповые

Вопрос:

У меня есть два кадра данных с общим индексом. Я хотел бы сгруппироваться df1 на основе подмножества столбцов в df2 .

Я знаю , как сгруппировать несколько столбцов уже в df1 , например df1.groupby(['col1', 'col2']) , и я знаю, как сгруппироваться в другой серии с тем же индексом, например df1.groupby(df2['col1']) . Есть ли немедленный способ сделать что-то вроде

 gt;gt;gt; df1.groupby(df[['col1', 'col2']]) # ValueError: Grouper for 'lt;class 'pandas.core.frame.DataFrame'gt;' not 1-dimensional  

Конечно, я мог бы сделать

 df1.groupby([df2['col1'], df2['col2']])  

но, похоже, для этого должен быть более прямой синтаксис. (Представьте, что у вас есть несколько группирующих столбцов и т. Д.)

Комментарии:

1. групповая серия, а не фрейм данных

Ответ №1:

Как насчёт:

 gbobj = pd.concat([df1, df2[['col1','col2']], axis=1).groupby(['col1','col2'])  

Ответ №2:

Это может быть merge либо join concat два кадра данных , а затем группировка, либо «более прямой синтаксис» с использованием понимания списка, например:

 many_grouping_columns = ['A', 'B', ...] # columns found in in df2 df1.groupby([df2[col] for col in many_grouping_columns])