如何简洁地为DataFrame中各组填充小计行数值
简洁实现DataFrame小计行填充
示例输入数据
先构造符合需求的示例DataFrame:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Group': ['A', 'A', 'Total A', 'B', 'B', 'B', 'Total B'], 'Value': [1, 2, np.nan, 3, np.nan, 5, np.nan] })
简洁解决方案
利用pandas的分组和向量化操作,无需循环即可完成填充:
# 提取对应组名(从"Total X"中剥离前缀) df['Group_Name'] = df['Group'].str.replace('Total ', '', regex=False) # 按组计算求和(自动忽略NaN),并映射到对应行 df['Value'] = df['Value'].mask( df['Group'].str.startswith('Total '), df.groupby('Group_Name')['Value'].transform('sum') ) # 清理临时列 df = df.drop('Group_Name', axis=1)
结果说明
运行后得到的目标DataFrame:
Group Value 0 A 1.0 1 A 2.0 2 Total A 3.0 3 B 3.0 4 B NaN 5 B 5.0 6 Total B 8.0
关键细节
str.replace精准提取组名,保证和前面的分组对应groupby.transform('sum')自动忽略NaN值,计算每组的有效求和mask方法仅对"Total X"行进行值替换,不改动其他行的原始数据- 全程使用pandas向量化操作,比循环实现更高效、简洁
内容的提问来源于stack exchange,提问作者ImNotSureAboutStats
相关产品推荐
相关产品推荐

