[英]How to use mode() on resampling timeseries?
我有一個具有時間序列的 dataframe,每個數據對應一個 day_of_week(周一至周日)
我很想知道我的時間序列何時轉換為每月,每個月出現頻率最高的 day_of_week 是什么,我使用以下內容:
bike['days_of_the_week'].resample('M').mode()
但這給了我錯誤
AttributeError: 'DatetimeIndexResampler' object 沒有屬性 'mode'
所以“模式”不適用於時間序列? 那么在重新采樣后找出“模式”問題的最佳方法是什么?
根據pd.DataFrame.resample的文檔,您可以使用apply
來傳遞自定義重采樣器。 SciPy 有一個您可以使用的實現scipy.stats.mode ,並進行了一些調整。
import scipy.stats
def mode(xs):
return scipy.stats.mode(xs)[0][0]
這是一個例子:
import pandas as pd
days = pd.date_range('2019-01-01', '2019-12-31')
bike = pd.DataFrame({'days_of_the_week': days.weekday_name}, index=days)
bike['days_of_the_week'].resample('M').apply(mode)
# 2019-01-31 Thursday
# 2019-02-28 Friday
# 2019-03-31 Friday
# 2019-04-30 Monday
# 2019-05-31 Friday
# 2019-06-30 Saturday
# 2019-07-31 Monday
# 2019-08-31 Friday
# 2019-09-30 Monday
# 2019-10-31 Thursday
# 2019-11-30 Friday
# 2019-12-31 Monday
# Freq: M, Name: days_of_the_week, dtype: object
@mcskinner 的答案在大多數情況下都有效,但我建議在 dataframe 不連續以避免 IndexError 的情況下捕獲錯誤
from scipy import stats
def mode(xs):
try:
return stats.mode(xs)[0][0]
except IndexError:
return np.nan
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.