Python 如果计数大于某些值,如何更改pd.系列中的布尔值
我有以下布尔数列,我试图找到Python 如果计数大于某些值,如何更改pd.系列中的布尔值,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有以下布尔数列,我试图找到计数,我必须检查假值,如果连续数列中假值的计数大于2,则让它为假,但如果计数小于等于2,则我必须将其反转,从False到True 预期输出:与wise first time一样,False重复两次,这意味着它将变为True,但如果我们看到True值之后False再次重复两次以上,因此这些值将保持为False 如何使用Pandas函数执行此操作 True True True True True False False True True True True True T
计数
,我必须检查假
值,如果连续数列中假
值的计数大于2,则让它为假,但如果计数小于等于2,则我必须将其反转
,从False到True
预期输出:与wise first time一样,False重复两次,这意味着它将变为True,但如果我们看到True值之后False再次重复两次以上,因此这些值将保持为False
如何使用Pandas函数执行此操作
True
True
True
True
True
False
False
True
True
True
True
True
True
True
False
False
False
False
False
False
True
True
True
True
尝试使用
groupby
和cumsum
生成唯一的False组,然后获取每组的计数
,如果该计数小于三,则使用~
反转该系列组,并使用掩码应用回序列:
s.mask(s.groupby((s).cumsum().where(~s)).transform('count') < 3, ~s)
尝试使用groupby
和cumsum
生成唯一的False组,然后获取每组的计数
,如果该计数小于三,则使用~
反转该系列组,并使用掩码应用回序列:
s.mask(s.groupby((s).cumsum().where(~s)).transform('count') < 3, ~s)
让我们试试别的
s=df.cumsum().mask(df)
df=df.mask(s.isin(s.value_counts()[s.value_counts()<=2].index),True)
df
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
10 True
11 True
12 True
13 True
14 False
15 False
16 False
17 False
18 False
19 False
20 True
21 True
22 True
23 True
Name: a, dtype: bool
s=df.cumsum().mask(df)
df=df.mask(s.isin)(s.value_counts()[s.value_counts()让我们尝试不同的方法
s=df.cumsum().mask(df)
df=df.mask(s.isin(s.value_counts()[s.value_counts()<=2].index),True)
df
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
10 True
11 True
12 True
13 True
14 False
15 False
16 False
17 False
18 False
19 False
20 True
21 True
22 True
23 True
Name: a, dtype: bool
s=df.cumsum().mask(df)
df=df.mask(s.isin(s.value_counts()[s.value_counts())您能否缩短示例(~10行将是完美的)并提供预期的输出?请@coldspeed正确解释输出请阅读信息您能否缩短示例(~10行将是完美的)并提供预期输出,请?@coldspeed正确解释输出,请阅读信息