Pandas DataFrame匹配相同Polygon_No和shp替换area列0值方法
Pandas按多列分组替换0值方案
实现逻辑
按Polygon_No、shp两列做分组,取每组内area列的非0值,替换本组内所有为0的area值,兼容分组内无有效非0值的异常场景。
完整实现代码
import pandas as pd # 构造测试数据,实际使用时替换为你自己的DataFrame读取逻辑即可 df = pd.DataFrame({ 'Polygon_No': [2,2,2,2], 'shp': [4,4,6,6], 'Sp.': ['T.a.', 'T.n.', 'B.a.', 'T.a.'], 'area': [31429, 0, 0, 15714] }) # 核心替换逻辑 df['area'] = df.groupby(['Polygon_No', 'shp'])['area'].transform( lambda group: group.replace(0, group[group != 0].iloc[0]) if (group != 0).any() else group ) # 输出查看结果 print(df)
运行结果
Polygon_No shp Sp. area 0 2 4 T.a. 31429 1 2 4 T.n. 31429 2 2 6 B.a. 15714 3 2 6 T.a. 15714
扩展说明
如果同一个分组内存在多个非0的area值,可以根据业务需求调整替换取值逻辑:
- 取分组非0最大值:将
group[group != 0].iloc[0]替换为group[group != 0].max() - 取分组非0平均值:替换为
group[group != 0].mean() - 取分组非0求和值:替换为
group[group != 0].sum()
内容的提问来源于stack exchange,提问作者Abdullah Nagy
相关产品推荐
相关产品推荐

