如何在Python pandas中编写通用DataFrame求和处理函数
Pandas 汇总行通用封装函数实现
函数实现
以下是适配不同列名同结构DataFrame的通用封装函数,内置了多场景条件判断:
import pandas as pd def sum_handler(df, sum_cols=None, non_sum_fill_value='', sum_row_label='sum', place_top=True, skipna=True): # 条件1:未指定求和列时自动识别所有数值类型列作为求和列 if sum_cols is None: sum_cols = df.select_dtypes(include='number').columns.tolist() # 条件2:指定的求和列存在缺失,直接返回原DataFrame避免运行报错 elif not set(sum_cols).issubset(df.columns): return df # 条件3:输入DataFrame为空时直接返回 if df.empty: return df # 计算求和行数据 sum_row = df[sum_cols].sum(skipna=skipna).to_frame().T # 非求和列统一填充指定值 for col in df.columns: if col not in sum_cols: sum_row[col] = non_sum_fill_value # 存在name列时单独填充汇总标识 if 'name' in df.columns: sum_row['name'] = sum_row_label # 合并汇总行与原DataFrame if place_top: res_df = pd.concat([sum_row, df], ignore_index=True) else: res_df = pd.concat([df, sum_row], ignore_index=True) return res_df
调用示例
针对你提供的示例DataFrame,可直接按以下方式调用:
# 手动指定需要求和的列 df = sum_handler(df, sum_cols=['value_a','value_b','difference']) # 也可不指定sum_cols,函数会自动识别所有数值列完成求和 df = sum_handler(df)
参数说明
sum_cols:需要求和的列名列表,默认不传时自动识别所有数值类型列求和non_sum_fill_value:非求和列在汇总行的填充值,默认填空字符串sum_row_label:汇总行name列的标识内容,默认填sumplace_top:是否将汇总行放在表格顶部,默认True,设为False则放在底部skipna:求和时是否忽略空值,默认True
内容的提问来源于stack exchange,提问作者Elsa
相关产品推荐
相关产品推荐

