Python 是否有一种更快的方法来生成.csv文件,以替代groupby和循环?

Python 是否有一种更快的方法来生成.csv文件,以替代groupby和循环?,python,pandas,Python,Pandas,我必须生成几十个.csv文件,其中包含数百万行和几十列。我目前正在通过执行a列和B列的groupby,并循环以动态生成文件,并将转换为\u csv。下面是我试图做的一个例子。有更快的技术吗?我的实际数据帧需要10分钟以上才能运行,而且变得非常痛苦,这对几个项目都是有益的 import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0, 3, size=(10000,3)), columns=list('A

我必须生成几十个.csv文件,其中包含数百万行和几十列。我目前正在通过执行a列和B列的
groupby
,并循环以动态生成文件,并将
转换为\u csv
。下面是我试图做的一个例子。有更快的技术吗?我的实际数据帧需要10分钟以上才能运行,而且变得非常痛苦,这对几个项目都是有益的

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 3, size=(10000,3)), columns=list('ABC'))
%timeit for (a,b), x in df.groupby(['A', 'B']): x.to_csv(f'{a}_Invoice_{b}.csv', index=False)
经过的时间:

45.2 ms ± 1.58 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
另外,我创建了一个函数,它的时间类似,但我想发布它,这样,如果答案是多行代码,人们就可以更轻松地修改它以使用
%timeit

import pandas as pd
import numpy as np

def generate_invoices(df):
    for (a,b), x in df.groupby(['A', 'B']):
        x.to_csv(f'{a}_Invoice_{b}.csv', index=False)
    return

df = pd.DataFrame(np.random.randint(0, 3, size=(10000,3)), columns=list('ABC'))
%timeit generate_invoices(df)

我认为这里的主要瓶颈是写入大量文件。感谢您的输入@jezrael。这些都必须提供给个人客户,因此这是一项要求。顺便说一句,如果在df.groupby(['a','b',],sort=False)中使用
for(a,b),x:
使用真实数据会有更好的性能?我怀疑使用awk可能有一种快速实现这一点的方法,尽管这超出了我的技能水平。由于您没有在
groupby
中进行任何聚合,因此只要按
A
B
进行排序就足够了,然后在任何一个值发生变化时拆分为新文件,对吗?也许可以试试这里的常驻Unix专家。如果你正在聚合,你可以在Pandas中进行聚合并导出到csv,然后你可以用任何语言进行拆分。我没有任何想法,但我发布了一个问题。