Python Pandas 基于另一个数据框的groupby

Python Pandas groupby based on another dataframe

我有两个具有共同索引的数据框。我想根据 df2.

中的列子集对 df1 进行分组

我知道如何对 df1 中已有的多个列进行分组,例如 df1.groupby(['col1', 'col2']),并且我知道如何对具有相同索引的不同系列进行分组,例如 df1.groupby(df2['col1'])。有没有一种直接的方法可以做类似

的事情
>>> df1.groupby(df[['col1', 'col2']])
# ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional

当然可以

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

但似乎应该有更直接的语法。 (想象一下有几个分组列等)

怎么样:

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

它可以是 mergejoinconcat 两个数据框然后分组或使用列表理解的“更直接的语法”,例如:

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