繁体   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