簡體   English   中英

遍歷熊貓數據框的最快方法?

[英]Fastest way to iterate through a pandas dataframe?

如何遍歷數據框並僅返回滿足特定條件的行? 這種情況必須在以前的行和列上進行測試。 例如:

          #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個條件,要返回的行必須為真。 考慮這樣做的方法是為所有符合條件的觀察結果創建一個列表,然后為出現在所有三個列表中的所有行創建一個單獨的列表。

我的兩個問題如下:

什么是最快的方式來基於前幾行獲取所有滿足特定條件的行? 遍歷5,000行的數據框似乎太長了。 特別是如果必須測試3個條件。

獲取滿足所有3個條件的行的最佳方法是什么?

選擇行的最快方法是遍歷數據框的行。 而是,為要選擇的行創建一個具有True值的掩碼(布爾數組),然后調用df[mask]來選擇它們:

mask = (df['column 0'].shift(1) + df['column 3'].shift(2) >= 6)
newdf = df[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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM