簡體   English   中英

Select 一個有效條件后一個 dataframe 中的行數

[英]Select a number of rows in a dataframe after a valid condition

我想 select 在驗證條件后指定行數:

  • 這是我的 dataframe:

在此處輸入圖像描述

  • 我想 select 在條目等於 1 之后的三列,所以對於第一次出現我會得到類似的東西:

在此處輸入圖像描述

  • 如果我想研究每一個事件,也許是 groupby,我不知道最合適的 output 是什么?

首先刪除前01

df = df[df['entry'].eq(1).cumsum().ne(0)]

df = df.groupby(df['entry'].cumsum()).head(4)
    Timestamp  entry
1        11.2      1
2        11.3      0
3        11.4      0
4        11.5      0
7        11.8      1
8        11.9      0
9        12.0      0
10       12.1      0

詳情及說明

對於在第一次匹配之前刪除所有值的一般解決方案,使用 Series.eq 進行比較,然后通過Series.eq進行累積總和並通過Series.cumsum進行Series.ne - 因此在cumsum操作后過濾掉所有0值:

print (df.assign(comp1 = df['entry'].eq(1),
                 cumsum =df['entry'].eq(1).cumsum(),
                 mask = df['entry'].eq(1).cumsum().ne(0)))
    Timestamp  entry  comp1  cumsum   mask
0        11.1      0  False       0  False
1        11.2      1   True       1   True
2        11.3      0  False       1   True
3        11.4      0  False       1   True
4        11.5      0  False       1   True
5        11.6      0  False       1   True
6        11.7      0  False       1   True
7        11.8      1   True       2   True
8        11.9      0  False       2   True
9        12.0      0  False       2   True
10       12.1      0  False       2   True

通過boolean indexing過濾后,創建具有組累積sum的輔助Series

print (df['entry'].cumsum())
1     1
2     1
3     1
4     1
5     1
6     1
7     2
8     2
9     2
10    2
Name: entry, dtype: int64

因此,對於最終解決方案,使用具有4值的GroupBy.head來獲取具有1行和下 3 行的行:

df = df.groupby(df['entry'].cumsum()).head(4)
print (df)
    Timestamp  entry
1        11.2      1
2        11.3      0
3        11.4      0
4        11.5      0
7        11.8      1
8        11.9      0
9        12.0      0
10       12.1      0

對於按組循環使用:

for i, g in df.groupby(df['entry'].cumsum()): 
    print (g.head(4))

如果想要 DataFrame 的DataFrame列表:

L = [g.head(4) for i, g in df.groupby(df['entry'].cumsum())]

暫無
暫無

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

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