python - 迭代数据框中的行的最有效方法是什么?
问题描述
我正在处理一个超过 1000 万行的数据集。作为数据工程过程的一部分,我想更新一列,它满足其他两列中的条件。
我是通过以下方式完成的,但是由于记录数量很大,因此执行起来需要很长时间。
for i in df1.index:
val1, val2= 0,0
val1 = df1.iat[i,6]
val2 = df1.iat[i,7]
if val1 < 270.37 and val2 < 2.5:
df1.at[i,'ppt_type']= 1
elif val1<270.37 and val2>=2.5 and val2<7.6:
df1.at[i,'ppt_type']=2
else:
df1.at[i,'ppt_type']= 3
请提出可以有效更新列值的方法。
谢谢。
解决方案
使用 numpy.where() 可以根据不同的列组合不同的条件。
import numpy as np
import pandas as pd
data = [{'a': 1, 'b': 2, 'c':3},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
a b c
1 2 3
5 10 20
df.a = np.where((df.b >=10 ) & (df.c <= 30),1,df.a)
a b c
1 2 3
1 10 20
推荐阅读
- c# - 两个节点失败后,三节点集群中的 EventStore 持久订阅不可用
- ruby-on-rails - 消息中的参数错误#create for Mailboxer in Ruby on Rails
- java - 如何创建一个循环的世界地图?(Java-Swing)
- java - 为什么我无法在 Java 中屏蔽长数据类型的 32 位
- c++ - 是否可以在另一个网络中寻址服务器/客户端套接字?(C++)
- macos - Cocoa 是否有类似 WinAPI 的 DrawThemeBackground(绘制本机控件的函数)之类的东西?
- swift - 领域:创建新角色并向其添加用户失败
- junit - 如何根据 db 调用对具有 db 调用和后续行的代码块进行单元测试
- javascript - Wonder Plugin Carousel 来自 Youtube 崩溃的多个播放列表请求
- php - 如果访问者来自特定的 WordPress 页面 - 使用页面 ID,如何回显 HTML 链接?