2016-07-18 235 views
2

我有一個數據幀,時間是一個浮動相關的數據集:熊貓計算平均每小時

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 

請問這需要是一個自定義函數,因爲時間列不是DateTime對象?

+0

是什麼時間價值代表什麼? -46.5 =在某個時間點之前30分鐘46小時? –

+0

這是正確的 – GNMO11

回答

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 
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()