[英]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.