首页 > 解决方案 > 用矢量化/应用替换 pandas iterrows

问题描述

考虑以下示例,我将遍历每一行,将它们分成两个样本,并为每行执行一个统计测试:

    for index, row in data.iterrows():
        stat, p = mannwhitneyu(row.iloc[:self.neighbors], row.iloc[self.neighbors:], alternative = 'greater')
        data.loc[index, 'stat'] = stat
        data.loc[index, 'prob'] = p

有什么办法可以加快速度吗?我看到 Apply 或 Vectorization 应该改进它,但我真的不知道如何实现它来实现我想要实现的目标,因为我需要逐行执行相同的测试。

谢谢您的帮助!

标签: pythonpandasloops

解决方案


如果您指定 ,则可以应用于行axis=1。在你的情况下,它会是这样的:

def change_value(row):
    stat, p = mannwhitneyu(row.iloc[:self.neighbors], row.iloc[self.neighbors:], 
    alternative = 'greater')
    row['stat'] = stat
    row['prob'] = p

#Assuming your dataframe is called df
df.apply(change_value, axis=1)

推荐阅读