python - 用矢量化/应用替换 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 应该改进它,但我真的不知道如何实现它来实现我想要实现的目标,因为我需要逐行执行相同的测试。
谢谢您的帮助!
解决方案
如果您指定 ,则可以应用于行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)
推荐阅读
- sql - 如何使用 PostgreSQL 更新 JSON 数组中的每个对象?
- ubuntu - Ubuntu 20.04:HDMI 输出不工作 Nvidia GT 620M
- matlab - 如何在matlab的容器类中构造对象数组
- elasticsearch - 在 ElasticSearch 6.2.4 中启用 SSL/TLS
- c - C - 警告:指针和整数之间的比较('struct V_LISTE *' 和 'int')
- google-cloud-platform - 找不到气流到 gcp 挂钩
- java - javax.persistence.EntityExistsException:具有相同标识符值的不同对象
- elasticsearch - elasticsearch 更新索引设置分析器
- javascript - 从嵌套的对象数组中删除“值”键
- xml - 如何实现基于 Web 服务的数据库?