我有一个数据框df,其中包含分配给某些建筑物p的人口b

df
    p    b
0  150   3
1  345   7
2  177   4
3  267   2


和将其他一些建筑物df1b1中的建筑物相关联的数据框df

df1
    b1    b
0   17    3
1   9     7
2   13    7


我想将人口除以建筑物的数量分配给在df1中具有关联的建筑物。这样,我们生成df2,将150/2=75的人口分配给建筑物317,将345/3=115的人口分配给建筑物7,9,13

df2

    p     b
0  75     3
1  75    17
2  115    7
3  115    9
4  115   13
5  177    4
6  267    2

最佳答案

IIUC,您可以尝试合并两个b上的df,然后合并stack()和一些清理,最后在p上分组并转换count并用它除以p以获得p上的除法值:

m=(df.merge(df1,on='b',how='left').set_index('p').stack().reset_index(name='b')
 .drop_duplicates().drop('level_1',1).sort_values('p'))
m.p=m.p/m.groupby('p')['p'].transform('count')

print(m.sort_index())




       p     b
0   75.0   3.0
1   75.0  17.0
2  115.0   7.0
3  115.0   9.0
5  115.0  13.0
6  177.0   4.0
7  267.0   2.0

09-25 18:14