我df.head()
的数据框看起来像这样。我正在测量7到9 Hz频率之间的数据,并具有大约100个唯一值Psnr
。如果我想创建一个新数据框,并用一个点表示每个唯一值的最后五分钟的平均值Psnr
,那么最好的方法是什么?
Datum_Zeit Psnr
2018-10-04 14:43:11.410 2
2018-10-04 14:43:11.600 2
2018-10-04 14:43:11.790 2
2018-10-04 14:43:11.970 2
2018-10-04 14:43:12.160 2
这样做的一种可能方法是创建子数据帧,再次对其进行过滤和合并,如下所示。但是,我相信必须有一个更简单的解决方案
dfs = {k: df[df['Psnr'] == k] for k in df['Psnr'].unique()}
我相信您首先需要为每个组过滤最后5分钟的数据,然后再按mean
列进行汇总Psnr
:
print (df)
Datum_Zeit Psnr Speed Torque
0 2018-10-04 14:38:11.410 2 8 6
1 2018-10-04 14:39:11.600 2 7 0
2 2018-10-04 14:40:11.790 2 1 1
3 2018-10-04 14:41:11.970 2 9 3
4 2018-10-04 14:43:12.160 2 5 1
5 2018-10-04 14:39:11.600 3 7 0
6 2018-10-04 14:40:11.790 3 1 1
7 2018-10-04 14:44:11.970 3 9 3
8 2018-10-04 14:45:12.160 3 5 1
df['Datum_Zeit'] = pd.to_datetime(df['Datum_Zeit'])
s = df.groupby('Psnr')['Datum_Zeit'].transform('max')
df = df[df['Datum_Zeit'].between(s - pd.Timedelta(300, 's'), s)]
print (df)
Datum_Zeit Psnr Speed Torque
1 2018-10-04 14:39:11.600 2 7 0
2 2018-10-04 14:40:11.790 2 1 1
3 2018-10-04 14:41:11.970 2 9 3
4 2018-10-04 14:43:12.160 2 5 1
7 2018-10-04 14:44:11.970 3 9 3
8 2018-10-04 14:45:12.160 3 5 1
如果需要所有列的均值,则不包含datetime
:
df = df.groupby('Psnr').mean()
print (df)
Speed Torque
Psnr
2 5.5 1.25
3 7.0 2.00
如果仅需要datetime列的列:
df['dates']= df['Datum_Zeit'].astype(np.int64)
df1 = pd.to_datetime(df.groupby('Psnr')['dates'].mean()).reset_index()
print (df1)
Psnr dates
0 2 2018-10-04 14:40:56.880000000
1 3 2018-10-04 14:44:42.064999936
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句