可以说我有一列df ['test']`:
-1,-2,-3、2,-4、3,-5,-4,-3,-7
因此,我想过滤出连续至少有三个负值的组。所以
groups = my_grouping_function_by_sequence()
groups[0] = [-1,-2-3]
groups[1] = [-5,-4,-3,-7]
在测试熊猫数字数据中的序列时是否有一些预定义的检查?它不一定是大熊猫,但我正在寻找一种快速且适应性强的解决方案。任何意见将是有益的。谢谢!
问题来源:stackoverflow
使用GroupBy
和cumsum
创建连续的负数组。
grps = df['test'].gt(0).cumsum()
dfs = [d.dropna() for _, d in df.mask(df['test'].gt(0)).groupby(grps) if d.shape[0] >= 3]
输出
for df in dfs:
print(df)
test
0 -1.0
1 -2.0
2 -3.0
test
6 -5.0
7 -4.0
8 -3.0
9 -7.0
让我们逐步进行以下操作:第一行,为连续的负数创建组
print(grps)
0 0
1 0
2 0
3 1
4 1
5 2
6 2
7 2
8 2
9 2
Name: test, dtype: int32
但正如我们所看到的,它还包括正数,我们不想在输出中考虑这些正数。因此,我们使用DataFrame.mask将这些值转换为NaN:
df.mask(df['test'].gt(0))
# same as df.mask(df['test'] > 0)
test
0 -1.0
1 -2.0
2 -3.0
3 NaN
4 -4.0
5 NaN
6 -5.0
7 -4.0
8 -3.0
9 -7.0
然后我们在此数据帧上分组,并仅保留> =
3行的组:
for _, d in df.mask(df['test'].gt(0)).groupby(grps):
if d.shape[0] >= 3:
print(d.dropna())
test
0 -1.0
1 -2.0
2 -3.0
test
6 -5.0
7 -4.0
8 -3.0
9 -7.0
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。