迭代pandas数据帧的最快方法?

2024-06-02 13:33:04 发布

您现在位置:Python中文网/ 问答频道 /正文

如何运行数据帧并只返回满足特定条件的行?必须在前面的行和列上测试此条件。例如:

          #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

我想为每一行测试一些条件,如果所有条件都通过了,我想将该行追加到列表中。例如:

^{pr2}$

我可能有多达3个条件必须为真才能返回行。路途 我想做这件事的方法是列出所有正确的观察结果 然后为所有三个列表中出现的所有行生成一个单独的列表。在

我的两个问题是:

从前面的行中获取满足特定条件的所有行的最快方法是什么?在5000行的数据帧中循环似乎太长了。尤其是如果有3种情况需要测试。在

获取满足所有3个条件的行列表的最佳方法是什么?在


Tags: 数据方法列表情况条件行和列特定条件pr2
1条回答
网友
1楼 · 发布于 2024-06-02 13:33:04

选择行的最快方法是迭代dataframe中的行。相反,为要选择的行创建一个具有真值的掩码(布尔数组),然后调用df[mask]来选择它们:

mask = (df['column 0'].shift(1) + df['column 3'].shift(2) >= 6)
newdf = df[mask]

要使用逻辑and组合多个条件,请使用&

^{pr2}$

对于逻辑或使用|

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

相关问题 更多 >