大家好
对于学校项目,我对Pandas Dataframe的操作持续时间感到困惑。
我有一个数据帧df,其形状是(250 000 000,200)。此数据框包含描述机器上传感器行为的变量值。 它们由'循环'组织(每当机器开始一个新循环时,该变量加1)。在这个循环中,'CycleTime'描述了'循环'中行的位置。
在'mean'DataFrame中,我通过'CycleTime'计算每个变量组的平均值
'anomaly_matrix'DataFrame表示每个周期的全局异常,它是属于Cycle的每一行的平方差与相应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)DataFrame持续6个小时,这是由于anomaly_matrix.loc [cycle] + =(row - mean.loc [time])** 2
我尝试使用apply函数进行改进,但是我没有成功在该apply函数中添加其他DataFrame。尝试对熊猫进行矢量化也是如此。
您是否知道如何加快此过程?感谢
答案 0 :(得分:1)
您可以使用:
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