我有一个数据框,其中time是与数据集相关的浮点数:
Time Value
-47.88333 90
-46.883333 23
-45.900000 66
-45.883333 87
-45.383333 43
时间列的范围是-48到0.我想要做的是计算从-47.5到-.5的每半小时的平均值。 例如:
-47.5将是介于-48和-47之间的所有值的平均值,-46.5将是介于-47和-46之间的所有值的平均值。如果没有价值,我想继续以前的平均值。
导致输出看起来像:
Time Value
-47.5 90
-46.5 23
-45.5 65.33
-44.5 65.33
-43.5 65.33
这是否需要是自定义函数,因为时间列不是日期时间对象?
答案 0 :(得分:3)
您可以非常轻松地使用groupby执行此操作:
(df.groupby(df.Time.apply(lambda x: np.floor(x) + 0.5))
.mean()
.Value
.reindex(np.arange(-47.5, -42.5))
.ffill())
Time
-47.5 90.000000
-46.5 23.000000
-45.5 65.333333
-44.5 65.333333
-43.5 65.333333
Name: Value, dtype: float64
答案 1 :(得分:2)
尝试使用pd.cut
:
#change the bins arg to modify the size of the bins
df.loc[:, 'TimeBin'] = pd.cut(df.Time, bins=[i for i in range (-48, 0)])
#groupby the time bin and take the mean:
df[['TimeBin', 'Value']].groupby('TimeBin').mean()