Если только затраты памяти не станут узким местом, я ожидаю, что такой подход может быть медленнее.Тем не менее, вы пытались установить подмножество df2
на основе индексов column2
, которые возвращаются после операции groupby
на df1
?Ниже приведен пример того, что я имею в виду.
Полагаю, что другим вариантом было бы рассмотреть структуру сокращения карты (например, pyspark)?
# two toy datasets
df1 = pd.DataFrame({i:np.random.choice(np.arange(10), size=20) for i in range(2)}).rename(columns={0:'col1',1:'col2'})
df2 = pd.DataFrame({i:np.random.choice(np.arange(10), size=5) for i in range(2)}).rename(columns={0:'colOther',1:'col2'})
# make sure we don't use values of col2 that df2 doesn't contain
df1 = df1[df1['col2'].isin(df2['col2'])]
# for faster indexing and use of .loc
df2_col2_idx = df2.set_index('col2')
# iterate over the groups rather than merge
for i,group in df1.groupby('col1'):
subset = df2_col2_idx.loc[group.col2,:]
# some function on the subset here
# note 'i' is the col1 index
print(i,subset.colOther.mean())
Обновление: для включения предложения комментария @ max для apply
функции для групп:
df1.groupby(column1).apply(lambda x: df2_col2_idx.loc[x[columns2],other_columns].agg($SomeAggregatingFunction))