根据组比较过滤熊猫数据框组

时间:2019-06-21 11:02:45

标签: python pandas dataframe

我正在尝试从熊猫数据框中删除损坏的数据。我想从值框大于上一个组的值差异的数据框中删除组。这是一个示例:

   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

对不起,如果我不清楚。

3 个答案:

答案 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