gpt4 book ai didi

python - 查找 pandas 系列中至少 N 个样本的 bool 区间

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:26 26 4
gpt4 key购买 nike

我正在处理 pandas 数据框

D=pd.DataFrame(data=[1.0,2.0,2.0,2.0,5.0,3.0,2.0,2.0,5.0,5.0,8.0,1.0]) 

我识别低于特定阈值的值

a=D<4.0

我可以计算某个条件的 True 值连续出现的次数:

df1 = a.cumsum()-a.cumsum().where(~a).ffill().fillna(0).astype(int) 

产量:

df1
Out[121]:
0
0 1
1 2
2 3
3 4
4 0
5 1
6 2
7 3
8 0
9 0
10 0
11 1

现在我想转换df1以获取具有如果满足条件的连续元素的数量为 3 个或更多,则 True;如果满足 3 个或更少,则 False。我已经尝试过了

df1.loc[:,'part of interest']=df1.values>3.0

这导致:

        0  part of interest
0 1 False
1 2 False
2 3 False
3 4 True
4 0 False
5 1 False
6 2 False
7 3 False
8 0 False
9 0 False
10 0 False
11 1 False

这是正确的。我只需要所有元素(0,1,2,3)的 True 值,而不仅仅是那些值高于的元素。期望的输出:

 0  part of interest
0 1 **True**
1 2 **True**
2 3 **True**
3 4 True
4 0 False
5 1 False
6 2 False
7 3 False
8 0 False
9 0 False
10 0 False
11 1 False

最佳答案

您可以先区分每个连续的组,然后按value_counts映射 ,但首先删除 0 值:

b = a.ne(a.shift()).cumsum() * a
m = b[0].map(b[0].mask(b[0] == 0).value_counts()) > 3

df1 = a.cumsum()-a.cumsum().where(~a).ffill().fillna(0).astype(int)
df1['part of interest'] = m
print (df1)
0 part of interest
0 1 True
1 2 True
2 3 True
3 4 True
4 0 False
5 1 False
6 2 False
7 3 False
8 0 False
9 0 False
10 0 False
11 1 False

详细信息:

print (b)
0
0 1
1 1
2 1
3 1
4 0
5 3
6 3
7 3
8 0
9 0
10 0
11 5

print (b[0].mask(b[0] == 0).value_counts())
1.0 4
3.0 3
5.0 1
Name: 0, dtype: int64

print (b[0].map(b[0].mask(b[0] == 0).value_counts()))
0 4.0
1 4.0
2 4.0
3 4.0
4 NaN
5 3.0
6 3.0
7 3.0
8 NaN
9 NaN
10 NaN
11 1.0
Name: 0, dtype: float64

关于python - 查找 pandas 系列中至少 N 个样本的 bool 区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47470467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com