Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 数据帧:最大连续值计数_Pandas_Count - Fatal编程技术网

Pandas 数据帧:最大连续值计数

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

我有这样的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  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