我正在尝试从熊猫数据框中删除损坏的数据。我想从值框大于上一个组的值差异的数据框中删除组。这是一个示例:
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
对不起,如果我不清楚。
答案 0 :(得分:3)
首先删除唯一行的重复项,然后将差异与移位后的值进行比较,最后通过布尔索引进行过滤:
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
答案 1 :(得分:1)
也许:
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
答案 2 :(得分:0)
我们可以检查差异是否小于或等于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