Python 一次为多个数据帧/文件创建分组

Python 一次为多个数据帧/文件创建分组,python,csv,pandas,group-by,Python,Csv,Pandas,Group By,我有多个巨大的tsv文件,我正试图处理使用熊猫。我想按“col3”和“col5”分组。我试过这个: import pandas as pd df = pd.read_csv('filename.txt', sep = "\t") g2 = df.drop_duplicates(['col3', 'col5']) g3 = g2.groupby(['col3', 'col5']).size().sum(level=0) print g3 到目前为止,它工作正常,输出如下: yes 2 no 2

我有多个巨大的tsv文件,我正试图处理使用熊猫。我想按“col3”和“col5”分组。我试过这个:

import pandas as pd
df = pd.read_csv('filename.txt', sep = "\t")
g2 = df.drop_duplicates(['col3', 'col5'])
g3 = g2.groupby(['col3', 'col5']).size().sum(level=0)
print g3
到目前为止,它工作正常,输出如下:

yes 2
no  2

我希望能够聚合多个文件的输出,也就是说,能够一次按所有文件中的这两列进行分组,并打印一个公共输出,总出现次数为“是”或“否”或任何该属性。换句话说,我现在想在多个文件上同时使用groupby。如果一个文件没有这些列中的任何一列,则应跳过它并转到下一个文件。

一种方法是连接dfs。它会消耗很多内存。这些文件有多大

filelist = ['file1.txt', 'file2.txt']
df = pd.concat([pd.read_csv(x, sep="\t") for x in filelist], axis=0)

这是一个很好的用例

下面是一个示例,使用了来自的几个简化文件。我特意将一个大文件拆分为两个文件,每个文件有1000000行:

[16]中的
:从blaze导入数据,通过
In[17]:ls
trip10.csv trip11.csv
在[18]中:d=数据('*.csv')
在[19]中:expr=by(d[['passenger\u count','medallion']],平均时间=d.trip\u time\u In_secs.mean())
[20]中:%时间结果=计算(expr)
CPU时间:用户3.22秒,系统:393毫秒,总计:3.61秒
壁时间:3.6秒
在[21]:!杜赫*
194M trip10.csv
192M trip11.csv
In[22]:len(d)
出[22]:200万
在[23]:result.head()中
出[23]:
乘客计数标志平均时间
0 08538606A68B9A44756733917323CE4B 0
1 0 BB9A21E40969D85C11E68A12FAD8DDA 15
2 0 9280082BB6EC79247F47EB181181D1A4 0
3 0 9F4C63E44A6C97DE0EF88E537954FC33 0
4 B9182BF4BE3E50250D3EAB3FD790D1C9 14
注意:这将使用熊猫自己的分块CSV阅读器对熊猫执行计算。如果您的文件在GB范围内,最好将其转换为诸如或之类的格式,因为这些是二进制格式,专为对大型文件进行数据分析而设计。CSV只是带有约定的文本块