Python 遍历数据帧的最快方法?
如何运行数据帧并仅返回满足特定条件的行?必须在前面的行和列上测试此条件。例如:Python 遍历数据帧的最快方法?,python,database,python-2.7,pandas,ipython,Python,Database,Python 2.7,Pandas,Ipython,如何运行数据帧并仅返回满足特定条件的行?必须在前面的行和列上测试此条件。例如: #1 #2 #3 #4 1/1/1999 4 2 4 5 1/2/1999 5 2 3 3 1/3/1999 5 2 3 8 1/4/1999 6 4 2 6 1/5/1999 8 3 4 7 1/6/1999 3 2 3
#1 #2 #3 #4
1/1/1999 4 2 4 5
1/2/1999 5 2 3 3
1/3/1999 5 2 3 8
1/4/1999 6 4 2 6
1/5/1999 8 3 4 7
1/6/1999 3 2 3 8
1/7/1999 1 3 4 1
for row in dataframe:
if [row-1, column 0] + [row-2, column 3] >= 6:
append row to a list
我想为每一行测试一些条件,如果所有条件都通过了,我想将该行附加到列表中。例如:
#1 #2 #3 #4
1/1/1999 4 2 4 5
1/2/1999 5 2 3 3
1/3/1999 5 2 3 8
1/4/1999 6 4 2 6
1/5/1999 8 3 4 7
1/6/1999 3 2 3 8
1/7/1999 1 3 4 1
for row in dataframe:
if [row-1, column 0] + [row-2, column 3] >= 6:
append row to a list
我最多可以有3个条件,这些条件必须为true才能返回行。路途
我想做这件事的方法是列出所有真实的观察结果
然后为所有三个列表中出现的所有行创建一个单独的列表
我的两个问题如下:
基于前面的行,获取满足特定条件的所有行的最快方法是什么?在5000行的数据帧中循环似乎太长了。特别是如果必须测试潜在的3种条件
获取满足所有3个条件的行列表的最佳方法是什么?选择行的最快方法是不遍历数据帧中的行。相反,为要选择的行创建一个带真值的掩码(布尔数组),然后调用
df[mask]
选择它们:
mask = (df['column 0'].shift(1) + df['column 3'].shift(2) >= 6)
newdf = df[mask]
要将多个条件与逻辑and组合,请使用
&
:
mask = ((...) & (...))
对于逻辑or,请使用|
:
mask = ((...) | (...))
比如说,
In [75]: df = pd.DataFrame({'A':range(5), 'B':range(10,20,2)})
In [76]: df
Out[76]:
A B
0 0 10
1 1 12
2 2 14
3 3 16
4 4 18
In [77]: mask = (df['A'].shift(1) + df['B'].shift(2) > 12)
In [78]: mask
Out[78]:
0 False
1 False
2 False
3 True
4 True
dtype: bool
In [79]: df[mask]
Out[79]:
A B
3 3 16
4 4 18
非常感谢。正是我要找的@unutbu为什么在这里使用.shift(1)和.shift(2)?@VatsalAggarwal:OP写了
if[row-1,column 0]+[row-2,column 3]>=6
,其中row-1
表示前一行,row-2
表示前一行。翻译成熊猫语,这是df['A'].shift(1)
和df['B'].shift(2)
@unutbu谢谢!为了这个解释