【问题标题】:Enumerating a grouped variable in Python在 Python 中枚举分组变量
【发布时间】:2015-03-31 05:30:24
【问题描述】:

我有一个使用 Python 和患者 ID 号的数据框,每条记录代表不同的预约。在每次预约时,一个特征(dx)被记录为 0 或 1。我想创建一个新特征来总结 dx 特征,但仅限于该患者的那一点。

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 循环和 groupby 语句,但到目前为止还没有成功。感谢您提供的任何帮助!

【问题讨论】:

  • 您是否只是在寻找cumsum()

标签: python pandas grouping


【解决方案1】:

如果我了解您的目的,您可以通过执行 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

【讨论】:

  • 我们有多确定 OP 不只是在寻找 cumsum? [我的意思是df.groupby("patient_id")["dx"].cumsum()]
  • @DSM 不知道,但这符合 OP 的预期,值得询问更多信息,我同意
  • 我认为 OP 首先需要 groupby,请参阅我编辑的评论。
  • 感谢@EdChum 的帮助!这正是我想要的。
猜你喜欢
  • 2014-09-20
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 2016-04-03
  • 2016-04-13
  • 1970-01-01
相关资源
最近更新 更多