簡體   English   中英

按條件統計熊貓連續發生的次數

[英]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的情況

因此,此示例中的預期結果是A20074消失一次B消失0次,而C消失3次(分別在20063、20071和20081中)

我要執行以下操作:

  1. 按時間消失的總數(此示例中的列,因此在20063年消失了一次,在20072年再次消失了等)
  2. 按類型划分:A在20074年消失了一次,C在20063、20071和20081年消失了3次
  3. 失蹤總數(此處為4)

有人可以幫我如何在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 maskNaN ,然后對每一行進行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.

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