2015-03-30 51 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