簡體   English   中英

根據組比較過濾熊貓數據框組

[英]Filtering pandas dataframe groups based on groups comparison

我正在嘗試從熊貓數據框中刪除損壞的數據。 我想從值框大於上一個組的值差異的數據框中刪除組。 這是一個例子:

   Value
0      1
1      1
2      1
3      2
4      2
5      2
6      8 <- here number of group if I groupby by Value is larger than
7      8    the last groups number by 6, so I want to remove this
8      3    group from dataframe
9      3

預期結果:

   Value
0      1
1      1
2      1
3      2
4      2
5      2
6      3
7      3

編輯:jezrael解決方案很棒,但就我而言,可能會有重復的組值:

   Value
0      1
1      1
2      1
3      3
4      3
5      3
6      1
7      1

對不起,如果我不清楚。

首先刪除唯一行的重復項,然后將差異與移位后的值進行比較,最后通過布爾索引進行過濾:

s = df['Value'].drop_duplicates()
v = s[s.diff().gt(s.shift())]

df = df[~df['Value'].isin(v)]
print (df)
   Value
0      1
1      1
2      1
3      2
4      2
5      2
8      3
9      3

也許:

df2 = df.drop_duplicates()
print(df[df['Value'].isin(df2.loc[~df2['Value'].gt(df2['Value'].shift(-1)), 'Value'].tolist())])

輸出:

   Value
0      1
1      1
2      1
3      2
4      2
5      2
8      3
9      3

我們可以檢查差異是否小於或等於5 NaN 在檢查是否有重復項並保留這些行之后:

s = df[df['Value'].diff().le(5) | df['Value'].diff().isna()]
s[s.duplicated(keep=False)]

   Value
0      1
1      1
2      1
3      2
4      2
5      2
8      3
9      3

暫無
暫無

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

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