簡體   English   中英

計算 Pandas 中零序列的長度

[英]Calculating length of sequence of zeros in Pandas

我有一張這樣的桌子

單元 地位 日期
1 1
1 2
1 3
0 4
0 5
1 6
1 7

並且我想創建一個新列,其中我將擁有status列中零序列的大小。 因此,對於該示例, output 將是

單元 地位 日期 差距
1 1 0
1 2 0
1 3 0
0 4 2
0 5 2
1 6 0
1 7 0

DataFrame 中的所有單元都必須這樣做。 我是基於這個問題,但我被困在我為間隙中的所有行設置總大小的部分

對某些值的塊進行分組的常用方法是對其他值進行cumsum 鑒於您的數據按Unit排序:

df['gap'] = (df.groupby(['Unit', 'status', df['status'].cumsum()])
             ['status'].transform('size')
             .where(df['status'].eq(0), other=0)
            )

Output:

  Unit  status  date  gap
0  One       1     1    0
1  One       1     2    0
2  One       1     3    0
3  One       0     4    2
4  One       0     5    2
5  One       1     6    0
6  One       1     7    0

另一種方法是通過 package python-rle rle 使用游程編碼:

import rle 

r = rle.encode(df.status)

df['gap'] = (rle
  .decode([r[1][x] if r[0][x] == 0 else 0 for x in range(len(r[0]))], r[1]))

Output:

 Unit  status  date  gap
0  One       1     1    0
1  One       1     2    0
2  One       1     3    0
3  One       0     4    2
4  One       0     5    2
5  One       1     6    0
6  One       1     7    0

暫無
暫無

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

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