我开始从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中执行此操作。
答案 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)