[英]count consecutive occurrences by condition in pandas
我有以下數據框:
data = {'A': [0,0,0,1,1,1,0,1], 'B': [0,1,1,1,1,1,1,1], 'C': [1,0,1,0,1,1,1,0]}
df=pd.DataFrame(data)
df=df.transpose()
columns={'0':'population'}
df=df.rename(index=str, columns={0: "20062", 1: "20063", 2: "20064", 3: "20071", 4: "20072", 5: "20073", 6: "20074", 7: "20081"})
Out[135]:
20062 20063 20064 20071 20072 20073 20074 20081
A 0 0 0 1 1 1 0 1
B 0 1 1 1 1 1 1 1
C 1 0 1 0 1 1 1 0
我的主要任務是找到``失蹤''的數量
'Disapaance'讓我們定義為在1
之后跟隨0
的情況
因此,此示例中的預期結果是A
在20074
消失一次 , B
消失0次,而C
消失3次(分別在20063、20071和20081中)
我要執行以下操作:
有人可以幫我如何在python中做到這一點。
我的數據框非常大,因此理想情況下,我將尋找通用解決方案。
謝謝
您可以使用diff
和sum沿axis=None
獲得總消失
>>> df.diff(axis=1).eq(-1).values.sum(axis=None)
4
要獲取每行,則沿axis=1
sum
axis=1
df.diff(axis=1).eq(-1).sum(axis=1)
A 1
B 0
C 3
dtype: int64
要獲得每次, axis=0
sum
axis=0
df.diff(axis=1).eq(-1).sum(axis=0)
20062 0
20063 1
20064 0
20071 1
20072 0
20073 0
20074 1
20081 1
dtype: int64
首先將所有0 mask
為NaN
,然后對每一行進行ffill
,並找到原始新df與原始行之間的差異, sum
(df.mask(df==0).ffill(1).fillna(0)!=df).sum(1)
Out[146]:
A 1
B 0
C 3
dtype: int64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.