pandas DataFrame仅统计正元素计算多列行均值的实现方法
实现方案
场景1:所有行统一统计全部列的正元素平均值
直接使用pandas向量化操作实现,性能优异,适合大数据量场景:
import pandas as pd # 构造示例数据 d = {'col1': [1, 2,-4,5], 'col2': [3, 4,5,6], 'col3': [4,5,-6,-8], 'col4': [1,2,3,4]} df = pd.DataFrame(data=d) # 核心逻辑:将非正元素替换为NaN后按行求均值,mean方法会自动跳过NaN df['pos_mean'] = df.where(df > 0).mean(axis=1)
运行后输出结果符合需求:
第一行4个正元素平均值为(1+3+4+1)/4=2.25,第四行3个正元素(col1、col2、col4)平均值为(5+6+4)/3=5,和仅统计col2、col4的结果一致。
场景2:部分行需要自定义统计的列范围
如果需要按行强制指定统计列(比如第四行不管其他列是否为正,都仅统计col2、col4),可以用apply调用自定义函数实现:
def calc_pos_mean(row): # 索引为0的第一行,统计全部列的正元素 if row.name == 0: valid_values = row[row > 0] # 索引为3的第四行,仅统计col2、col4的正元素 elif row.name == 3: target_cols = row[['col2', 'col4']] valid_values = target_cols[target_cols > 0] # 其他行默认统计全部列正元素 else: valid_values = row[row > 0] return valid_values.mean() df['pos_mean'] = df.apply(calc_pos_mean, axis=1)
内容的提问来源于stack exchange,提问作者Pradeep Amireddy
相关产品推荐
相关产品推荐

