簡體   English   中英

計數 pandas 中的連續值組

[英]Count groups of consecutive values in pandas

我有一個帶有 0 和 1 的 dataframe,我想用Pandas解決方案(不是 itertools,不是 Z23EEEB4347BDD26BFC6B7EE9A37 迭代)計算 1 組(不介意 0)。

其他 SO 帖子建議基於shift() / diff() / cumsum()的方法,當 dataframe 中的前導序列以 0 開頭時,這似乎不起作用。

df = pandas.Series([0,1,1,1,0,0,1,0,1,1,0,1,1]) # should give 4
df = pandas.Series([1,1,0,0,1,0,1,1,0,1,1])     # should also give 4
df = pandas.Series([1,1,1,1,1,0,1])             # should give 2

任何想法?

讓我們使用cumsum識別 1 的不同組,然后使用nunique計算唯一組的數量

m = df.eq(0)
m.cumsum()[~m].nunique()

結果

case 1: 4
case 2: 4
case 3: 2

如果你只有 0/1,你可以使用:

s = pd.Series([0,1,1,1,0,0,1,0,1,1,0,1,1])

count = s.diff().fillna(s).eq(1).sum()

output: 4 (另外兩個為42

然后fillna確保以1開頭的 Series 將被計算在內

更快的選擇

使用差異,計算 1 並使用第一項更正結果:

count = s.diff().eq(1).sum()+(s.iloc[0]==1)

不同 pandas 方法的比較:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM