Pandas 数据帧:最大连续值计数
我有这样的e数据帧:Pandas 数据帧:最大连续值计数,pandas,count,Pandas,Count,我有这样的e数据帧: RTD Val BA 2 BA 88 BA 15 BA 67 BA 83 BA 77 BA 79 BA 90 BA 1 BA 14 第一: df['count'] = df.Val > 15 print(df) 因此,我得到: RTD Val count 0 BA 2 False 1 BA 88 True 2 B
RTD Val
BA 2
BA 88
BA 15
BA 67
BA 83
BA 77
BA 79
BA 90
BA 1
BA 14
第一:
df['count'] = df.Val > 15
print(df)
因此,我得到:
RTD Val count
0 BA 2 False
1 BA 88 True
2 BA 15 False
3 BA 67 True
4 BA 83 True
5 BA 77 True
6 BA 79 True
7 BA 90 True
8 BA 1 False
9 BA 14 False
现在,要计算我使用的最大连续出现次数:
def rolling_count(val):
if val == rolling_count.previous:
rolling_count.count +=1
else:
rolling_count.previous = val
rolling_count.count = 1
return rolling_count.count
rolling_count.count = 0 #static variable
rolling_count.previous = None #static variable
ddf= df['count'].apply(rolling_count)
print (max(ddf))
我得到的结果是:5
我的答案是:
要计算False的最大连续出现次数,我应该怎么做
正确的值等于2
我很想知道除True之外的连续出现的最大值,因为Val>15
,反之,这是我的尝试
gt15 = df.Val.gt(15)
counts = df.groupby([gt15, (gt15 != gt15.shift()) \
.cumsum()]).size().rename_axis(['>15', 'grp'])
counts
>15 grp
False 1 1
3 1
5 2
True 2 1
4 5
dtype: int64
下面是一个较长的方法,通过添加0将count强制为整数而不是布尔值。绝对差值表示布尔值的变化,第一个值填充为1 评估此变化序列的结果,以确定“bools”变量中的元素是否大于0,并从df['count']中提取相应的元素 更改向量的结果与
cumsum
一起使用,形成ID,这些ID在runs变量的groupby
中使用。然后在runs变量中包含每个ID的计数
countDf = DataFrame({'bools': list(df['count'][(df['count'] + 0)
.diff().abs().fillna(1) > 0]),
'runs': list(df['Val'].groupby((df['count'] + 0)
.diff().abs().fillna(1).cumsum()).count())})
countDf
bools runs
0 False 1
1 True 1
2 False 1
3 True 5
4 False 2
您可以使用标准子集设置提取最大运行次数,如
countDf[countDf.bools == False]['runs'].max()
2
countDf[countDf.bools == True]['runs'].max()
5
谢谢你的回答,但工作的最低代码是:ddf=df['count'].apply(rolling_count).where(df['count']==False).dropna()print(max(ddf))谢谢你的回答,但工作的最低代码是:
ddf=df['count'].apply(rolling_count).where(df['count']==False).dropna()
print(max(ddf))
countDf[countDf.bools == False]['runs'].max()
2
countDf[countDf.bools == True]['runs'].max()
5