使用python为组中的每个元素添加序列号

DKA*_*DKA 13 python database grouping count pandas

我有一个数据框,每个人都有多个记录.我想枚举python中每个人的序列记录.基本上我想在下表中创建'sequence'列:

patient  date      sequence
145      20Jun2009        1
145      24Jun2009        2
145      15Jul2009        3
582      09Feb2008        1
582      21Feb2008        2
987      14Mar2010        1
987      02May2010        2
987      12May2010        3
Run Code Online (Sandbox Code Playgroud)

这基本上和这里的问题相同,但我在python中工作,无法实现sql解决方案.我怀疑我可以使用带有可迭代计数的groupby语句,但到目前为止还没有成功.谢谢!

DKA*_*DKA 39

我偶然发现了一个令人尴尬的答案.groupby语句有一个'cumcount()'选项,它将枚举组项.

df['sequence']=df.groupby('patient').cumcount()
Run Code Online (Sandbox Code Playgroud)

需要注意的是,记录必须按照您想要枚举的顺序排列.


Rya*_*yan 6

如果您希望根据另一列的值对序列进行排序,请首先对数据帧进行排序,然后添加新的序列列。

例如,如果我们希望根据患者就诊日期对患者就诊顺序进行排序,则可以使用以下代码。

df['sequence'] = df.sort_values(by=['patient', 'date']).groupby('patient']).cumcount() + 1
Run Code Online (Sandbox Code Playgroud)


Jon*_*han 1

问题是如何对多列数据进行排序。

一个简单的技巧是使用排序key函数的参数。

您将按从数组的列构建的字符串进行排序。

rows = ...# your source data

def date_to_sortable_string(date):
  # use datetime package to convert string to sortable date.
  pass

# Assume x[0] === patient_id and x[1] === encounter date

# Sort by patient_id and date
rows_sorted = sorted(rows, key=lambda x: "%0.5d-%s" % (x[0], date_to_sortable_string(x[1])))

for row in rows_sorted:
  print row
Run Code Online (Sandbox Code Playgroud)