选择行的最快的方法不是遍历行。而是,创建一个mask(即,布尔数组),然后调用df[mask]选择。
这里有一个问题:如何动态表示dataframe中的当前行、前一行?答案是用shift。
shift(0):当前行
shift(1):前一行
shift(n):往前第n行
若要满足多个条件
逻辑与&:
mask = ((...) & (...))
逻辑或|:
mask = ((...) | (...))
逻辑非~:
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