Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 加速涉及多个数据帧的操作_Python_Pandas_Dataframe_Accelerate - Fatal编程技术网

Python 加速涉及多个数据帧的操作

Python 加速涉及多个数据帧的操作,python,pandas,dataframe,accelerate,Python,Pandas,Dataframe,Accelerate,大家好 对于一个学校项目,我被熊猫数据帧操作的持续时间所困扰 我有一个数据帧df,它的形状是(25000000200)。此数据框包含描述机器上传感器行为的变量值。 它们按“周期”组织(每次机器开始一个新周期时,该变量递增1)。在这个循环中,“CycleTime”描述了行在“循环”中的位置 在“平均值”数据框中,我通过“周期时间”计算每个变量组的平均值 “异常矩阵”数据框表示每个周期的全局异常,即属于该周期的每行的平方差与相应周期时间的平均值之和 下面是我的代码示例 df = pd.DataFra

大家好

对于一个学校项目,我被熊猫数据帧操作的持续时间所困扰

我有一个数据帧df,它的形状是(25000000200)。此数据框包含描述机器上传感器行为的变量值。 它们按“周期”组织(每次机器开始一个新周期时,该变量递增1)。在这个循环中,“CycleTime”描述了行在“循环”中的位置

在“平均值”数据框中,我通过“周期时间”计算每个变量组的平均值

“异常矩阵”数据框表示每个周期的全局异常,即属于该周期的每行的平方差与相应周期时间的平均值之和

下面是我的代码示例

df = pd.DataFrame({'Cycle': [0, 0, 0, 1, 1, 1, 2, 2], 'CycleTime': [0, 1, 2, 0, 1, 2, 0, 1], 'variable1': [0, 0.5, 0.25, 0.3, 0.4, 0.1, 0.2, 0.25], 'variable2':[1, 2, 1, 1, 2, 2, 1, 2], 'variable3': [100, 5000, 200, 900, 100, 2000, 300, 300]})
mean = df.drop(['Cycle'], axis = 1).groupby("CycleTime").agg('mean')
anomali_matrix = df.drop(['CycleTime'], axis = 1).groupby("Cycle").agg('mean')
anomaly_matrix = anomali_matrix - anomali_matrix

for index, row in df.iterrows():
    cycle = row["Cycle"]
    time = row["CycleTime"]
    anomaly_matrix.loc[cycle] += (row - mean.loc[time])**2


>>>anomaly_matrix
   variable1    variable2   variable3
Cycle           
0   0.047014    0.25       1.116111e+07
1   0.023681    0.25       3.917778e+06
2   0.018889    0.00       2.267778e+06
我的(250 000 000,200)数据帧的计算持续了6个小时,这是由于异常_matrix.loc[cycle]+=(row-mean.loc[time])**2造成的

我试图通过使用apply函数进行改进,但没有成功地在apply函数中添加其他数据帧。尝试将熊猫矢量化也是一样的

你知道如何加速这个过程吗?谢谢

您可以使用:

df1 = df.set_index(['Cycle', 'CycleTime'])

mean = df1.sub(df1.groupby('CycleTime').transform('mean'))**2
df2 = mean.groupby('Cycle').sum()
print (df2)
       variable1  variable2     variable3
Cycle                                    
0       0.047014       0.25  1.116111e+07
1       0.023681       0.25  3.917778e+06
2       0.018889       0.00  2.267778e+06

“平均值的平方差之和”的另一个名称是方差。也许有一些相关的优化函数?
anomali\u matrix=anomali\u matrix-anomali\u matrix
是正确的吗?anomali\u matrix=anomali\u matrix-anomali\u matrix肯定是一种将我的数据帧的所有值设置为0的糟糕方法。我尝试了优化函数,但目前没有得到好的结果。我会坚持下去。@laurentBimont-我使用你的解决方案,只是省略了
异常矩阵=异常矩阵-异常矩阵
,因为它没有意义。谢谢你的解决方案,我用异常矩阵的结果更新了我的帖子。它似乎不等于您的df2。我将进一步研究你的解决方案,看看它是否可行。@laurentBimont-谢谢,那么解决方案就更简单了;)