[英]Python dataframe - drop consecutive rows based on a column
我需要根據列值刪除連續的行。 我的數據框如下所示
df = pd.DataFrame({
"CustID":
["c1","c1","c1","c1","c1","c1","c1","c1","c1","c1","c2","c2","c2","c2","c2","c2"],
"saleValue":
[10, 12, 13, 6, 4 , 2, 11, 17, 1,5,8,2,16,13,1,4],
"Status":
[0, 0, 0, 1, 1 ,1, 0, 0, 1,1,1,1,0,0,1,1]
})
dataframe looks like below
CustID saleValue Status
c1 10 0
c1 12 0
c1 13 0
c1 6 1
c1 4 1
c1 2 1
c1 11 0
c1 17 0
c1 1 1
c1 5 1
c2 8 1
c2 2 1
c2 16 0
c2 13 0
c2 1 1
c2 4 1
僅當狀態為 1 時,我才需要刪除每個 CustID 的連續行。你能告訴我最好的方法嗎
so the output should look like below.
CustID saleValue Status
c1 10 0
c1 12 0
c1 13 0
c1 6 1
c1 11 0
c1 17 0
c1 1 1
c2 8 1
c2 16 0
c2 13 0
c2 1 1
為整個 DataFrame 創建一個布爾掩碼。
給定DataFrame已經按ID分組,查找值為1,前一行也是1,且ID與前一行ID相同的行。 這些是要刪除的行,所以保留其余的行。
to_drop = (df['Status'].eq(1) & df['Status'].shift().eq(1) # Consecutive 1s
& df['CustID'].eq(df['CustID'].shift())) # Within same ID
df[~to_drop]
CustID saleValue Status
0 c1 10 0
1 c1 12 0
2 c1 13 0
3 c1 6 1
6 c1 11 0
7 c1 17 0
8 c1 1 1
10 c2 8 1
12 c2 16 0
13 c2 13 0
14 c2 1 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.