簡體   English   中英

在 Pandas Dataframe 中找到 5 個連續的相等的行值

[英]Find 5 consecutive row values in Pandas Dataframe that are equal

我有一個 dataframe 的格式

Col1 Col2 Col3
Time1  a  Match
Time2  b  NaN
Time3  c  Match
Time4  d  Match
Time5  e  Match
Time6  f  Match
Time7  g  Match
Time8  h  NaN
Time9  i  Match
Time10 j  NaN

因此,對於數據框,我想找到從 Time3 到 Time7 的值,因為 Col3 具有連續 5 行的匹配值。

我嘗試使用滾動 window,

idx = (df['Col3'].rolling(window=5) == "Match")

但是根據文檔,它似乎是為了計算而不是直接比較而制作的

go 有沒有其他優化的辦法呢?

一種經典方法是使用帶有自定義掩碼的 boolean 索引。 將其分解,它依賴於對連續匹配值進行分組,並計算組大小以對匹配行進行切片。

m = df.groupby(df['Col3'].ne('Match').cumsum())['Col3'].transform('size').ge(5)
df[m&m.shift()]

或者:

m = df['Col3'].ne('Match')
m2 = df.groupby((m|m.shift()).cumsum())['Col3'].transform('size').ge(5)
df[m2]

output:

    Col1 Col2   Col3
2  Time3    c  Match
3  Time4    d  Match
4  Time5    e  Match
5  Time6    f  Match
6  Time7    g  Match

暫無
暫無

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

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