我有一个数据框df
,其中包含分配给某些建筑物p
的人口b
df
p b
0 150 3
1 345 7
2 177 4
3 267 2
和将其他一些建筑物
df1
与b1
中的建筑物相关联的数据框df
df1
b1 b
0 17 3
1 9 7
2 13 7
我想将人口除以建筑物的数量分配给在
df1
中具有关联的建筑物。这样,我们生成df2
,将150/2=75
的人口分配给建筑物3
和17
,将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