在 pandas 数据框中对每一列应用函数

7

我应该如何用更多的pandas方式编写以下函数:

     def calculate_df_columns_mean(self, df):
        means = {}
        for column in df.columns.columns.tolist():
            cleaned_data = self.remove_outliers(df[column].tolist())
            means[column] = np.mean(cleaned_data)
        return means

感谢您的帮助。

remove_outliers 是做什么用的? - MaxU - stand with Ukraine
1
为什么要迭代列然后执行 cleaned_data = self.remove_outliers(df[column].tolist())?这似乎意味着你在针对每一列都重复移除异常值? - EdChum
我想在干净的数据上计算平均值。 - Night Walker
你可以执行:clean_df.mean() - MaxU - stand with Ukraine
1
你可以一次性计算所有列的平均值,然后一次性删除异常值,不是吗?在这里迭代列似乎是不必要的,因为你正在删除所有列上的异常值,并且可以在整个数据框上计算平均值。 - EdChum
1
我同意@EdChum的观点 - 如果可能的话,尽量避免使用.apply()方法,因为它非常缓慢和低效。 - MaxU - stand with Ukraine
2个回答

5

4

在我看来,对列的循环是不必要的:

def calculate_df_columns_mean(self, df):
    cleaned_data = self.remove_outliers(df[column].tolist())
    return cleaned_data.mean()

假设remove_outliers仍然返回一个数据框,上述内容应该足够了。
编辑:
我认为以下内容应该可行:
def calculate_df_columns_mean(self, df):
    return df.apply(lambda x: remove_outliers(x.tolist()).mean()

remove_outliers 获取列表并返回清理过的列表。 - Night Walker
尝试使用我的新编辑,它应该可以工作,但你真的应该专注于修改remove_outliers以便以矢量化的方式在np数组和如果可能的话在DataFrame上运行。 - EdChum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接