对列中每个唯一值的最后几项进行平均,以生成新的df



我有一个df.head(),我的数据帧是这样的。我测量的数据频率在7到9赫兹之间,有大约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分钟的数据,然后按列Psnr:聚合mean

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

如果只需要日期时间列的列:

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

由于数据帧已经按时间排序,因此可以通过transform+last计算与数据帧索引对齐的min_time系列,然后进行筛选,最后计算groupby:

min_times = df.groupby('Psnr')['Datum_Zeit'].transform('last') - pd.Timedelta('5 min')
res = df.loc[df['Datum_Zeit'] > min_times]
.groupby('Psnr').mean().reset_index()
print(res)
Psnr  Speed  Torque
0     2    5.5    1.25
1     3    7.0    2.00

最新更新