我有一个这样的pandas dataframe:
df = pd.DataFrame({'a':[1, 1, 1, 2, 1, 3, 1, 1, 4, 4, 5, 5, 5, 6, 6, 3]})
>>> df
a
0 1
1 1
2 1
3 2
4 1
5 3
6 1
7 1
8 4
9 4
10 5
11 5
12 5
13 6
14 6
15 3
我想保留列“a”中连续出现且小于或等于5的重复值。
该索引的数组保持应该是行0,1,2,6,7,8,9,10,11,12。
如何以Python的方式做到这一点?
结果应该是这样的:
a
0 1
1 1
2 1
6 1
7 1
8 4
9 4
10 5
11 5
12 5
4条答案
按热度按时间ztmd8pv51#
感谢@mozway的edit,这里有另一个可能的
mask
/duplicated
选项:输出量:
35g0bw712#
使用较小的值过滤consetive值,如
boolean indexing
中的5
:vwoqyblh3#
我也写了一些丑陋的代码,也工作了。但它根本不是Python的。
根据@mozway的建议,我使用了.eq而不是==。
vybvopom4#
您可以使用
groupby.transform
,但在您的情况下,您似乎更希望将至少2个值且不超过5个值的组作为值进行过滤:或者不使用
groupby
但使用shift
:输出量:
中间体:
第一步
m1
:连续值m2
:小于或等于5的值第二种方法
m0
:与先前值相同m1
:与上一个或下一个值相同m2
:等于或小于5