如何用Pandas计算各楼层房间的面积占比(求简洁实现)
问题
我有如下结构的Pandas DataFrame df:
Floor Room Area 0 1 Living room 25 1 1 Kitchen 20 2 1 Bedroom 15 3 2 Bathroom 21 4 2 Bedroom 14
需要新增一列floor_share,表示该房间面积在对应楼层的占比,最终效果如下(示例中Area值为适配占比展示调整后的结果):
Floor Room Area floor_share 0 1 Living room 18 0.30 1 1 Kitchen 18 0.30 2 1 Bedroom 24 0.40 3 2 Bathroom 10 0.67 4 2 Bedroom 20 0.33
目前我需要先分组计算楼层总面积,再遍历行计算占比,希望用更简洁的惯用写法实现。
解决方案
使用Pandas的groupby结合transform方法,一行代码即可完成:
df['floor_share'] = df['Area'] / df.groupby('Floor')['Area'].transform('sum')
如果需要和示例一样保留两位小数,可以补充round方法:
df['floor_share'] = (df['Area'] / df.groupby('Floor')['Area'].transform('sum')).round(2)
原理
transform('sum')会将分组计算的楼层总面积广播到原DataFrame的每一行,生成与原DataFrame长度一致的Series,每个元素对应当前行所在楼层的总面积。- 直接用原
Area列除以这个Series,就能批量得到每个房间的楼层面积占比,完全避免手动遍历行的低效操作。
内容的提问来源于stack exchange,提问作者pederlh
相关产品推荐
相关产品推荐

