Python 从数据帧中保存的分组数据高效地创建大量直方图
我想从pandas dataframe中的分组数据创建一组直方图。这里有一个类似的问题。要生成与我正在使用的非常相似的玩具数据,可以使用以下代码:Python 从数据帧中保存的分组数据高效地创建大量直方图,python,performance,numpy,pandas,histogram,Python,Performance,Numpy,Pandas,Histogram,我想从pandas dataframe中的分组数据创建一组直方图。这里有一个类似的问题。要生成与我正在使用的非常相似的玩具数据,可以使用以下代码: from pandas import DataFrame import numpy as np x = ['A']*300 + ['B']*400 + ['C']*300 y = np.random.randn(1000) df = DataFrame({'Letter':x, 'N':y}) 我想把这些柱状
from pandas import DataFrame
import numpy as np
x = ['A']*300 + ['B']*400 + ['C']*300
y = np.random.randn(1000)
df = DataFrame({'Letter':x, 'N':y})
我想把这些柱状图(读取装箱数据)放在一个新的数据框中,并将其保存以供以后处理。这才是真正的关键,我的文件是6GB,有400k+组,只有2列
我考虑过使用一个简单的for循环来完成这项工作:
data=[]
for group in df['Letter'].unique():
data.append(np.histogram(df[df['Letter']==group]['N'],range=(-2000,2000),bins=50,density=True)[0])
df2=DataFrame(data)
请注意,bin、range和density关键字对于我来说都是必需的,以便直方图在我的新dataframe df2中的行之间保持一致并标准化(参数值来自我的真实数据集,因此它在toy数据集上是多余的)。for循环工作得很好,在toy数据集上生成了预期的3行50列的数据帧。在我的真实数据集上,我估计完成代码的时间大约是9天。有没有更好/更快的方法来完成我正在寻找的任务
另外,我考虑过多处理,但我认为创建进程和切片数据的开销将比串行运行慢(我可能错了,不介意在这一点上进行更正) 对于您在这里描述的问题类型,我个人通常会执行以下操作,基本上是将整个任务委托给多线程Cython/C++。这是一项工作,但并非不可能,我不确定目前是否真的有可行的替代方案 以下是构建模块:
- 首先,您的
,df.x.values
只是numpy数组。演示如何从此类数组中获取C指针df.y.values
<> L> >现在你有指针,你可以使用Cython和上面的任何Python写一个真正的多线程程序(现在你在C++领域)。假设有k个线程扫描6GB数组,线程i处理密钥散列为i模k的组
- 对于C程序(这就是您现在的代码),GNU科学库有一个