2 回答
TA贡献1780条经验 获得超5个赞
利用:
#changed sample data for possible non 1 before first 1 occurence
df = pd.DataFrame(data = {'X':[5,8,1,1,8,5,8,11,7,11,12,7,2,2,6,7,9,2,1,3,10,2,10,13,4,6]})
#print (df)
您可以比较值 bySeries.eq并创建组 by Series.cumsum,删除组0(如果在第一个 1 之前存在一些值)和最后一组(如果列的最后一个值是 ,则也必须删除1) bySeries.isin与反转掩码 by~然后使用Series.value_counts与减去1:
s = df['X'].eq(1).cumsum()
s = s[~s.isin([0, s.max()])].value_counts().sub(1)
print (s)
2 14
1 0
Name: X, dtype: int64
最后得到最小值和最大值:
min1 = s.min()
max1 = s.max()
print (min1)
0
print (max1)
14
编辑:
如果需要先分组,1然后使用:
s = df['X'].eq(1).cumsum().value_counts().sort_index().iloc[:-1].sub(1)
print (s)
min1 = s.min()
max1 = s.max()
print (min1)
print (max1)
TA贡献1765条经验 获得超5个赞
它将遍历所有值并打印的最小值和最大值。
df = pd.DataFrame(data = {'X':[1,5,8,1,8,5,8,11,7,11,12,7,2,2,6,7,9,2,1,3,10,2,10,13,4,6]})
#print (df)
for i in set(df['X']):
s = df['X'].eq(i).cumsum()
s = s[~s.isin([0, s.max()])].value_counts().sub(1)
min1 = s.min()
max1 = s.max()
if math.isnan(min1):
min1=max1=0
print(f"min for {i} is {min1}")
print(f"max for {i} is {max1}")
添加回答
举报
