我正在处理一个拥有300万行和1,200个“群组”的数据集 - 让我们称之为姓氏。
以下是数据集的外观:
LastName FirstName
Smith Rachael
Smith John
Smith Rachael
Johnson Bob
Johnson Laura
Johnson Laura
我想分别查看每个姓氏,并对每个姓氏中的名字做一些事情。例如,我可能想知道哪个名字在Smith的姓氏中最流行,然后将其添加为自己的列(但实际上它比这复杂得多)。我需要保持所有行完整(换句话说,我需要保留每一个史密斯和每个约翰逊)。
LastName FirstName HighestFreq
Smith Rachael Rachael
Smith John Rachael
Smith Rachael Rachael
Johnson Bob Laura
Johnson Laura Laura
Johnson Laura Laura
我不知道最好的方法是将数据集拆分为1,200个数据集,然后在最后合并回来或进行某种循环。我是Python的新手,并且无法弄清楚如何正确地完成它。我已经找到了我需要查看各个行的代码,现在只看一次只知道一个姓氏。
另外,如果子集是最好的方法,我需要在循环中命名集合,因为我显然不会手动命名1,200个数据集。
感谢阅读。
答案 0 :(得分:1)
要保留返回结果的长度,您可以在transform
之后使用groupby
,然后将value_counts()
函数与index
一起使用,以获得每组中最常用的项目:
df['HighestFreq'] = (df.groupby('LastName')['FirstName']
.transform(lambda g: g.value_counts().index[0]))
df
答案 1 :(得分:0)
这里只是为了没有Pandas(见下面的Pandas):
按照您要分组的类别对文件进行排序,使用Unix命令或Python脚本,请参阅此处sorting large text data。
迭代已排序的文件并获取每个类别所需的指标。由于类别的所有实例现在彼此相邻,您只需将结果保存在内存中。
如果你想跳过排序,你也可以多次迭代文件(但这可能很慢)。您将中间结果保存到磁盘的想法当然会有效。
高级阅读:这基本上是一个map-reduce操作:创建子组分别处理它们然后合并结果。