![](/img/trans.png)
[英]Length of first sequence of zeros of given size after certain column in pandas dataframe
[英]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.