在不合并的情况下,按键将数据框的所有列除以较小的列

Divide all columns of a dataframe by a smaller one by key without merging

我知道这是一个问得很好的问题,但我搜索了很长时间,找不到答案。

我有这样的数据集:

ID.  denominator
A     2
B     4
C     5

还有一个是这样的:

ID.  Value1.   Value2.  Value3.  Value4  ...
A     2.        1.       4        8.     ...
B     4         2        6        0      ...
C     5.        5        7        7      ...

我想根据 ID 将第一个数据集中的所有列除以第二个数据集,并将第二个数据集上的值替换为除法的这个答案。

此外,数据集很大,所以我不想像某些答案那样先合并再拆分。

数据集:

df1 = pd.DataFrame({
        'ID.':list('abc'),
        'denominator':[2, 4, 5]
})

df2 = pd.DataFrame({
        'ID.':list('abc'),
         'var2':[1,0.5,7],
         'var3':[7,8,9],
         'var1':[1,3,1]
})

您可以使用 set_index:

df2.set_index('ID.').div(df1.set_index('ID.')['denominator'], axis=0)