簡體   English   中英

計算 python 中每個非零簇后的零數

[英]Count number of zeros after every non-zero clusters in python

我想在 dataframe 中的每批非零數字之后計算零的數量。 例如,請參閱此 dataframe。 在第一個非零簇之后的 A 列中的零數是 2。然后在下一個簇之后,零的數量是 4,在最后一個簇之后,零的數量是 2。所以 output 應該是 [2,4 ,2]。

Time A  B  C
60   5  4  3
120  4  5  2
180  5  5  5
240  0  0  0
300  0  0  0 
360  6  7  8
420  5  6  7
480  0  0  0
540  0  0  0 
600  0  0  0
660  0  0  0
720  5  6  6
780  5  6  6
840  0  0  0
900  0  0  0 

使用itertools.groupby

>>> from itertools import groupby
>>> [len(list(group)) for key, group in groupby(df.A) if key == 0]
[2, 4, 2]

元素本身用於分組,這意味着每個不同的元素將開始一個新的組; 因此,每當一個0開始一個組作為鍵時,我們將(惰性)組的長度作為結果。

for c in df.loc[:, "A":]:
    m = df[c] == 0
    print(
        c,
        df[c]
        .groupby((m != m.shift(1)).cumsum())
        .apply(lambda x: len(x) if x.iat[0] == 0 else np.nan)
        .dropna()
        .tolist(),
    )

印刷:

A [2.0, 4.0, 2.0]
B [2.0, 4.0, 2.0]
C [2.0, 4.0, 2.0]

暫無
暫無

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

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