聚合和粘贴

时间:2014-02-23 12:20:40

标签: python aggregate paste

我开始从R转向Python并且有一个愚蠢的问题。

我一直在寻找近5个小时来找到问题的解决方案。

我在R中有以下代码,它基本上采用dataframe df并根据唯一ID聚合医院的过期。所以我原来的桌子有很多UId重复,因为有人可能多次去医院,每次他们离开医院他们都有一个约会。我想要UID,以及所有过时的行。我可以使用R中的以下代码轻松完成此任务。

newdf= aggregate(data = df, OutDate~UID, FUN=paste, sep="," )

有人可以祈祷告诉我如何在Python中实现这一目标吗?

在R

中使用上述函数后,我的表格是什么样子
   -UID1,  10/20/2008, 11/30/2008, 1/1/1900, 1/1/1900 
   -UID2,  6/19/2010, 1/1/1900  
   -UID3,  11/17/2009   
   -UID4, 3/14/2010 ,   4/20/2010,  1/1/1900,   1/1/1900 
   -UID5,  12/12/2008,  8/27/2009,  1/1/1900

忽略日期,我刚刚完成了。但输出需要如上所示。 以前,我为当前列中的每个日期都有多个UID1行。 现在我如何在python中执行此操作。

2 个答案:

答案 0 :(得分:1)

你可以用词典理解来做到这一点:

from collections import defauldict

d = defaultdict(list)

for f in df.values():
   // Assuming the first value is the UID:
  d[f[0]].append(f)

现在d是一个字典,其中每个键都是UID,值是数据帧中的行列表。您可以将它们组合成一个字符串(就像您使用paste所做的那样),如下所示:

for uid,values in d.iteritems():
   for value in values:
       print('{},{}'.format(uid,','.join(value)))

答案 1 :(得分:0)

这听起来像构建一个字典,其中键是UID,并且当您循环访问数据时,您将每个过时日期附加到键。这假定您以csv文件的形式获取数据,其中csv.DictReader读取每行数据3。我根据您对数据文件和分隔符的显示做出假设。结果,行中的每个条目(可以包括时间,时间,诊断等)由标题行键入。我将alsao假设您可以告诉如何将数据读入csv处理。下面的快速代码显示了如何在行中生成字典条目。

我会显示数据的最终显示方式,然后显示数据的派生方式。

data = {UID1:(out1, out2, out3), UID2:(out3, out4)}

data = {}
for d in datarow:
   uid = d[UID]
   if uid not in data.keys():
     data[uid] = ()
   out = d[OUT]
   data[uid].append(out)