2015-03-30 82 views
1

我有一個使用Python的患者ID號的數據框,每個記錄代表不同的約會。在每次約會時,一個特徵(dx)被記錄爲0或1.我想創建一個新特徵來總結dx特徵,但只能達到該患者的那一點。枚舉Python中的分組變量

patient_ID | dx | 
29847   0 
29847   1 
29847   0 
29847   1 
29847   1 

我可以拿到小組第一的總和用一個簡單的GROUPBY聲明:

df.groupby(['patient_ID])['dx'].sum() 

但我想是枚舉值作爲一個新的功能,只考慮現在和以前的記錄:

patient_ID | dx | dx_enum 
29847   0   0 
29847   1   1 
29847   0   1 
29847   1   2 
29847   1   3 

我想這將採取for-loop和groupby語句的組合,但迄今不成功。感謝您的任何幫助,您可以提供!

+0

您是否在尋找'cumsum()'? – EdChum 2015-03-30 21:22:51

回答

0

如果我理解你在做什麼後,你可以通過執行GROUPBY然後調用transform和傳遞功能cumsum添加列:

In [44]: 

df['dx_enum'] = df.groupby('patient_ID')['dx'].transform(pd.Series.cumsum) 
df 
Out[44]: 
    patient_ID dx dx_enum 
0  29847 0  0 
1  29847 1  1 
2  29847 0  1 
3  29847 1  2 
4  29847 1  3 

Transform返回一系列對齊到原來的DF這樣你就可以將其添加爲列,請參閱文檔:http://pandas.pydata.org/pandas-docs/stable/groupby.html#transformation

+1

我們如何確定OP不只是在尋找'cumsum'? [我的意思是'df.groupby(「patient_id」)[「dx」]。cumsum()'] – DSM 2015-03-30 21:21:11

+0

@DSM dunno但是這樣做的確是OP所期待的,值得徵詢更多信息我同意 – EdChum 2015-03-30 21:22:34

+0

我認爲OP首先想要groupby,看看我編輯的評論。 – DSM 2015-03-30 21:25:15