Python 熊猫:DataFrame.sum()或DataFrame().as_matrix.sum()

Python 熊猫:DataFrame.sum()或DataFrame().as_matrix.sum(),python,pandas,Python,Pandas,我正在编写一个函数,用于计算pd.DataFrame中约800列的所有列的条件概率。我编写了几个版本的函数,发现两个主要选项的计算时间有很大差异: col_sums = data.sum() #Simple Column Sum over 800 x 800 DataFrame 选项#1: {'col_sums'和'data'分别是一个系列和数据帧} [这包含在index1和index2上的循环中,以获得所有组合] joint_occurance = data[index1] * data

我正在编写一个函数,用于计算pd.DataFrame中约800列的所有列的条件概率。我编写了几个版本的函数,发现两个主要选项的计算时间有很大差异:

col_sums = data.sum()   #Simple Column Sum over 800 x 800 DataFrame
选项#1: {'col_sums'和'data'分别是一个系列和数据帧}

[这包含在index1和index2上的循环中,以获得所有组合]

joint_occurance = data[index1] * data[index2]
sum_joint_occurance = joint_occurance.sum()
max_single_occurance = max(col_sum[index1], col_sum[index2])
cond_prob = sum_joint_occurance / max_single_occurance #Symmetric Conditional Prob
results[index1][index2] = cond_prob
Vs

选项#2:[在index1和index2上循环以获取所有组合] 唯一的区别是在循环之前,我将数据_矩阵导出到np.array,而不是使用DataFrame

new_data = data.T.as_matrix() [Type: np.array]
选项1的运行时间约为1700秒 选项2的运行时间约为122秒

问题:

  • 将数据帧的内容转换为np.array是否是计算任务的最佳选择
  • pandas中的.sum()例程与NumPy中的.sum()例程是否有显著差异,或者速度的差异是由于对数据的标签访问造成的
  • 为什么这些运行时如此不同

  • 在阅读文档时,我发现:

    第7.1.1节快速标量值获取和设置,因为使用[]索引必须处理很多情况(单标签访问、切片、, 布尔索引等),它有一点开销,以便配置 说出你的要求。如果只想访问标量值, 最快的方法是使用get_value方法,该方法已实现 在所有数据结构上:

    最佳猜测:
    因为我从数据帧多次访问单个数据元素(每个矩阵约640000个)。我认为速度的降低来自于我引用数据的方式(即“使用[]进行索引可以处理很多情况”),因此我应该使用get_value()方法来访问类似于矩阵查找的标量

    我建议您将函数移植到Cython,而不是纯Python。
    In [656]: s.get_value(dates[5])
    Out[656]: -0.67368970808837059
    In [657]: df.get_value(dates[5], ’A’)
    Out[657]: -0.67368970808837059