Pandas: рдЪрд░рдг рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рд░реЛрд▓рд┐рдВрдЧ рд╡рд┐рдВрдбреЛ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рдлрд╝рд░ре░ 2017  ┬╖  38рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pandas-dev/pandas

рдмрд╕ рдПрдХ рд╕реБрдЭрд╛рд╡ - rolling рдХреЛ рдПрдХ рдХрджрдо рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рд░реЛрд▓рд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЖрд░ рдХрд╛ rollapply(by=X) ред

рдХреЛрдб рдирдореВрдирд╛

рдкрд╛рдВрдбрд╛ - рдЕрдХреНрд╖рдо рд╕рдорд╛рдзрд╛рди (рд╣рд░ рд╡рд┐рдВрдбреЛ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдлрд┐рд░ рд╣рд░ рджреВрд╕рд░рд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд▓рд╛рдЗрд╕ рдХрд░реЗрдВ)

import pandas
ts = pandas.Series(range(0, 40, 2))
ts.rolling(5).apply(max).dropna()[::2]

рд╕реБрдЭрд╛рд╡:

ts = pandas.Series(range(0, 40, 2))
ts.rolling(window=5, step=2).apply(max).dropna()

рдЖрд░ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд ( рд░реЛрд▓рдкреНрд▓реА рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ):

require(zoo)
TS <- zoo(seq(0, 40, 2))
rollapply(TS, 5, FUN=max, by=2)

8 12 16 20 24 28 32 36 40

Enhancement Needs Discussion Numeric Window

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

"рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред"

рдкрд╛рдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдореИрдВрдиреЗ рдЬреЛ рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛рдо рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛, рдпрд╣ рд╣рд░ рдмрд╛рд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЖрд╡реЗрджрди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдВрдбреЛ рдХреЗ рдЕрдВрджрд░ рдЕрдЪреНрдЫреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╕рднреА 38 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрджрд┐ рдЖрдк 'рдорд╛рдирдХ' рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпреЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реИрдВ ( ts.rolling(5).max().dropna()[::2] )ред

IIUC рдпрд╣рд╛рдВ рдмрдЪрдд рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдордп рдХреЗ рдПрдХ рдЕрдВрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд╣реЛрдЧреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ nth рдорд╛рди)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ?

рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдпрд╣ 'рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХреА рд╡рд╛рдкрд╕реА' рдПрдкреАрдЖрдИ рдХреЛ рднреА рддреЛрдбрд╝ рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдИ рдмрджрд▓рд╛рд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ)ред рд╣рдо рд╕реАрдорд╛рдВрдд рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (IOW, рдЦрд┐рдбрд╝рдХреА рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЖрдк рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рддреЛ рдЕрднреА рднреА рдХреБрдЫ рднреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рдЖрдкрдХреЗ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

IIUC рдпрд╣рд╛рдВ рдмрдЪрдд рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдордп рдХреЗ рдПрдХ рдЕрдВрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд╣реЛрдЧреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ nth рдорд╛рди)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ?

рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдХреБрдЫ рдмрдбрд╝реЗ рд╕рдордп рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдкрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдп (рдХреЗрд╡рд▓ рдЕрдзрд┐рдХрддрдо рдирд╣реАрдВ) рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ - 400 рдХреЙрд▓рдо, 5-25 рд╣рд░реНрдЯреНрдЬ рдкрд░ рдбреЗрдЯрд╛ рдХреЗ рдШрдВрдЯреЗред рдореИрдВрдиреЗ 20kHz рддрдХ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЕрддреАрдд рдореЗрдВ рднреА рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ (рд╕реЗрдВрд╕рд░ рдбреЗрдЯрд╛ рдкрд░ рдлреАрдЪрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ)ред 5 рд╕реЗрдХрдВрдб рдХреЗ рдЪрд░рдг рдХреЗ рд╕рд╛рде 30 рд╕реЗрдХрдВрдб рдХреА рд╡рд┐рдВрдбреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдЪрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 25 рд╣рд░реНрдЯреНрдЬ рдкрд░ 5s рдЪрд░рдг рдХреЗ рд╕рд╛рде рдпрд╣ 1/125 рд╡рд╛рдВ рдХрд╛рдо рд╣реИ, рдЬреЛ 1 рдорд┐рдирдЯ рдпрд╛ 2 рдШрдВрдЯреЗ рдореЗрдВ рдЪрд▓рдиреЗ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдмрдирд╛рддрд╛ рд╣реИред

рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рд╕реБрдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рд╣реЛред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд╛рдпрдХ рдерд╛ рдЕрдЧрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рднреА рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗрдЧрд╛ - рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ!

рдЖрдк рдкрд╣рд▓реЗ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд░реЛрд▓рд┐рдВрдЧ

рдХреБрдЫ рдЗрд╕ рддрд░рд╣

df = df.resample ('30s')
df.rolling(..).max() (рдпрд╛ рдЬреЛ рднреА рдлрд╝рдВрдХреНрд╢рди)

рдЕрд░реЗ @jreback , рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдкрд░ max рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ (рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХреЛ рдХрдореА рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ mean рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ, рд╣реИ рдирд╛?):

df.resample('1s').max().rolling(30).max()

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ 30 рд╕реЗрдХрдВрдб рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдЕрдкрдирд╛ рдХрдореА рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдлрд┐рд░ 1 рд╕реЗрдХрдВрдб рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдФрд░ рдЗрд╕реЗ рдЕрдЧрд▓реЗ 30 рд╕реЗрдХрдВрдб рдбреЗрдЯрд╛ рдЖрджрд┐ рдкрд░ рдЪрд▓рд╛рдПрдВред рдКрдкрд░ рджреА рдЧрдИ рд╡рд┐рдзрд┐ рдбреЗрдЯрд╛ рдХреЗ 1 рд╕реЗрдХрдВрдб рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░рд╛ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ 30 рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдХрд╛рд░реНрдп рдХрд░реЗрдВред

рдпрд╣рд╛рдВ рдПрдХ рддреНрд╡рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЪреЛрдЯреА рд╕реЗ рдЪреЛрдЯреА рдХреА рдЧрдгрдирд╛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рджреЛ рдмрд╛рд░ рдЪрд▓рдиреЗ рдХрд╛ рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ):

# 10 minutes of data at 5Hz
n = 5 * 60 * 10
rng = pandas.date_range('1/1/2017', periods=n, freq='200ms')
np.random.seed(0)
d = np.cumsum(np.random.randn(n), axis=0)
s = pandas.Series(d, index=rng)

# Peak to peak
def p2p(d):
    return d.max() - d.min()

def p2p_arr(d):
    return d.max(axis=1) - d.min(axis=1)

def rolling_with_step(s, window, step, func):
    # See https://ga7g08.github.io/2015/01/30/Applying-python-functions-in-moving-windows/
    vert_idx_list = np.arange(0, s.size - window, step)
    hori_idx_list = np.arange(window)
    A, B = np.meshgrid(hori_idx_list, vert_idx_list)
    idx_array = A + B
    x_array = s.values[idx_array]
    idx = s.index[vert_idx_list + int(window/2.)]
    d = func(x_array)
    return pandas.Series(d, index=idx)

# Plot data
ax = s.plot(figsize=(12, 8), legend=True, label='Data')

# Plot resample then rolling (obviously does not work)
s.resample('1s').apply(p2p).rolling(window=30, center=True).apply(p2p).plot(ax=ax, label='1s p2p, roll 30 p2p', legend=True)

# Plot rolling window with step
rolling_with_step(s, window=30 * 5, step=5, func=p2p_arr).plot(ax=ax, label='Roll 30, step 1s', legend=True)

rolling window

@alexlouden рдЖрдкрдХреЗ рдореВрд▓ рд╡рд┐рд╡рд░рдг рд╕реЗ рдореБрдЭреЗ рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ

df.resample('5s').max().rolling('30s').mean() (рдпрд╛ рдЬреЛ рднреА рдХрдЯреМрддреА) рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдЕрдиреБрд░реВрдк рдЕрдзрд┐рдХ рд╣реИ

IOW, 5s рдмрд┐рди рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рдЙрд╕реЗ рд▓реЗрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдмрд┐рдВрджреБ рддрдХ рдХрдо рдХрд░реЗрдВ, рдлрд┐рд░ рдЙрди рдбрд┐рдмреНрдмреЗ рдкрд░ рд░реЛрд▓ рдХрд░реЗрдВред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд░реЛрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЕрд░реЗ @jreback , рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд░ 5 рд╕реЗрдХрдВрдб рдореЗрдВ 30 рд╕реЗрдХрдВрдб рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд░реЛрд▓рд┐рдВрдЧ_рд╡рд┐рде_рд╕реНрдЯреЗрдк рдлрд╝рдВрдХреНрд╢рди рджреЗрдЦреЗрдВред рдЕрдзрд┐рдХрддрдо/рдорд╛рдзреНрдп рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдг рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@jreback , рд╕реНрдЯреЗрдк рдлрдВрдХреНрд╢рди рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрднреА рддрдХ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдирд╣реАрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рджреВрд╕рд░рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рд▓рдЧрднрдЧ 3 рд╕реЗ 10 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рдирдореВрдиреЗ рд╡рд╛рд▓реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдордп-рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА рдбреЛрдореЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо Nyquist рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдбреЛрдореЗрди рдЬреНрдЮрд╛рди рд╕реЗ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ 10 рд╣рд░реНрдЯреНрдЬ (рдкреНрд░рддреНрдпреЗрдХ 100 рдПрдордПрд╕ рдореЗрдВ рдПрдХ рдмрд╛рд░) рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, рдЕрдЧрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЗрдирдкреБрдЯ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 20 рд╣рд░реНрдЯреНрдЬ (рдкреНрд░рддреНрдпреЗрдХ 50 рдПрдордПрд╕ рдореЗрдВ рдПрдХ рдмрд╛рд░) рдХреА рдЖрд╡реГрддреНрддрд┐ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдЙрд╕рд╕реЗ рдХрдо рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреБрди: рдирдореВрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЕрдВрддрдд: рдпрд╣рд╛рдБ рд╡реЗ рдЧрдгрдирд╛рдПрдБ рд╣реИрдВ рдЬреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ:

df.resample('50ms').mean().rolling(window=32).aggregate(power_spectrum_coeff)

рдпрд╣рд╛рдВ рд╣рдордиреЗ 8 рдХреЗ рдЧреБрдгрдХреЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдЪреБрдирд╛ рд╣реИ, рдФрд░ 32 рдХреЛ рдЪреБрдирдиреЗ рд╕реЗ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ 1.6 рд╕реЗрдХрдВрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреБрд▓ рдлрд╝рдВрдХреНрд╢рди рдПрдХрд▓-рдкрдХреНрд╖реАрдп рдЖрд╡реГрддреНрддрд┐ рдбреЛрдореЗрди рдЧреБрдгрд╛рдВрдХ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдорд╛рдзреНрдп рдШрдЯрдХ рдХреЗ рдмрд┐рдирд╛ (fft рдлрд╝рдВрдХреНрд╢рди рд╕рдордорд┐рдд рд╣реИ рдФрд░ 0 рд╡реЗрдВ рддрддреНрд╡ рдкрд░ рдорд╛рдзреНрдп рдорд╛рди рдХреЗ рд╕рд╛рде)ред рдирдореВрдирд╛ рдХреБрд▓ рдХрд╛рд░реНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:

def power_spectrum_coeff():
    def power_spectrum_coeff_(x):
        return np.fft.fft(x)[1 : int(len(x) / 2 + 1)]

    power_spectrum_coeff_.__name__ = 'power_spectrum_coeff'
    return power_spectrum_coeff_

рдЕрдм, рд╣рдо рдЗрд╕реЗ рд╣рд░ 0.4 рд╕реЗрдХрдВрдб рдпрд╛ рд╣рд░ 0.8 рд╕реЗрдХрдВрдб рдХреА рд╕реНрд▓рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдореЗрдВ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЧрдгрдирд╛рдУрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рд░ 50 рдПрдордПрд╕ рдореЗрдВ рдПрдлрдПрдлрдЯреА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдЯреБрдХрдбрд╝рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 400 ms рддрдХ рдкреБрди: рдирдореВрдирд╛рдХрд░рдг рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 400 ms рд╕рд┐рд░реНрдл 2.5 рд╣рд░реНрдЯреНрдЬ рд╣реИ, рдЬреЛ рдХрд┐ Nyquist рдЖрд╡реГрддреНрддрд┐ рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИ рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдЦреЛ рдЬрд╛рдПрдЧреАред

рдпрд╣ рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА рдбреЛрдореЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдереАрдВ, рдЬрд┐рдирдХреЗ рдХрдИ рд╕рдордп-рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдВрдмрдВрдзреА рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рдЬреИрд╕реЗ рд╕рд░рд▓ рдЯрд╛рдЗрдо-рдбреЛрдореЗрди рдХреБрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рдкреБрди: рдирдореВрдирд╛рдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдИ рдмрджрд▓рд╛рд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ)ред рд╣рдо рд╕реАрдорд╛рдВрдд рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (IOW, рдЦрд┐рдбрд╝рдХреА рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЖрдк рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдЬреЛ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рддреЛ рдЕрднреА рднреА рд╕рдм рдХреБрдЫ рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

'рд╕реНрдЯреЗрдк' рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдирд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛рдУрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдкрдВрдбреЛрдВ рдХрд╛ рднрд╡рд┐рд╖реНрдп рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЪрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗрд╡рд▓ рдХрдо рдЕрдВрдХ рджреЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕реНрд▓рд╛рдЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рд╕рд┐рд░реНрдл рдЙрди рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдирдореНрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@Murmuria рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд▓-рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдЬрдмрдХрд┐ рдореИрдВ step рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП rolling() рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ base рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ resample() , рдпрджрд┐ рдЪрд░рдг рдЖрдХрд╛рд░ рд╡рд┐рдВрдбреЛ рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдВрд╢ рд╣реИ ред @alexlouden рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

pandas.concat([
    s.resample('30s', label='left', loffset=pandas.Timedelta(15, unit='s'), base=i).agg(p2p) 
    for i in range(30)
]).sort_index().plot(ax=ax, label='Solution with resample()', legend=True, style='k:')

рд╣рдореЗрдВ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░реЗрдЦрд╛ рджреЛрдиреЛрдВ рддрд░рдл 30 рд╕реЗрдХрдВрдб рддрдХ рдлреИрд▓реА рд╣реБрдИ рд╣реИ):
rolling_with_step_using_resample

рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рд╣рдж рддрдХ рдмреЗрдХрд╛рд░ рд╣реИред рдкреАрдХ-рдЯреВ-рдкреАрдХ рдЧрдгрдирд╛ рдХреЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ @alexlouden рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ, p2p_arr() рд▓рдЧрднрдЧ 200x рддреЗрдЬ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ 2-рдбреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ max() рд▓рд┐рдП рдПрдХрд▓ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ min() ред

рд░реЛрд▓рд┐рдВрдЧ рдореЗрдВ рдЪрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рдмрд┐рдирд╛ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдХреНрдпрд╛ рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?

@alexlouden рдКрдкрд░ рдиреЗ рдпрд╣ рдХрд╣рд╛:

рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рд╕реБрдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдПрдкреАрдЖрдИ рд╣реЛред

рдХреНрдпрд╛ @alexlouden рдпрд╛ рдХреЛрдИ рдФрд░ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХреГрдкрдпрд╛ рдХреБрдЫ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕реЗ numpy рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд░реЗрдВ? рдореЗрд░реЗ рдЕрдм рддрдХ рдХреЗ рд╢реЛрдз рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдБ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЦреБрд▓рд╛ рдореБрджреНрджрд╛ рд╣реИ https://github.com/numpy/numpy/issues/7753

рдзрдиреНрдпрд╡рд╛рдж

рд╣рд╛рдп @tsando - рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди rolling_with_step рдореИрдВрдиреЗ рдКрдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

@alexlouden рдзрдиреНрдпрд╡рд╛рдж, рдмрд╕ рдЙрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреА рдЬрд╛рдБрдЪ рдХреА рдФрд░ рдпрд╣ рдЕрднреА рднреА рдкрд╛рдВрдбрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдПрдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╕реБрдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдзрд╛рдЧреЗ рдореЗрдВ рдореИрдВрдиреЗ https://github.com/numpy/numpy/issues/7753 рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╡реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ numpy рд╕реНрдЯреНрд░рд╛рдЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдВрдбреЛ рдФрд░ рд╕реНрдЯреЗрдк рдЗрдирдкреБрдЯ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред

@tsando рдпрд╣рд╛рдВ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд░рдЦрд╛ рд╣реИред (рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреАрдбреАрдПрдл рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдпрд╛)ред

рдКрдкрд░ рдореЗрд░рд╛ рдХрд╛рд░реНрдп рдпрд╣ рдерд╛ рдХрд┐ рдореИрдВ рдкрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ - рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ numpy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://gist.github.com/alexlouden/e42f1d96982f7f005e62ebb737dcd987

рдЙрдореНрдореАрдж рд╣реИ рдпреЗ рдорджрдж рдХрд░реЗрдЧрд╛!

@alexlouden рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЗрд╕реЗ (13, 1313) рдЖрдХрд╛рд░ рдХреА рдПрдХ рд╕рд░рдгреА рдкрд░ рдЖрдЬрд╝рдорд╛рдпрд╛ рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рджреА:

image

"рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред"

рдкрд╛рдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдореИрдВрдиреЗ рдЬреЛ рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛рдо рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛, рдпрд╣ рд╣рд░ рдмрд╛рд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЖрд╡реЗрджрди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдВрдбреЛ рдХреЗ рдЕрдВрджрд░ рдЕрдЪреНрдЫреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ

рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреМрд░рд╛рди рд▓рдЧрднрдЧ рд╣рд░ рдмрд╛рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдирд┐рдпрдВрддреНрд░рдг рджреЗ рд╕рдХрддреА рд╣реИред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкреБрд░рдЬреЛрд░ рд╕рдорд░реНрдерди рдХрд░реЗрдВ!

рд╕рд╣рдордд рд╣реИрдВ рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ

рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдВрдбреЛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд░рдЦрддреЗ рд╣реБрдП рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

рдореИрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ рд╡рд┐рд╢реЗрд╖ рд▓рдХреНрд╖реНрдп рдХреЗ рдЕрдиреБрд░реВрдк рдФрд░ рдЕрдзрд┐рдХ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

def average_smoothing(signal, kernel_size, stride):
    sample = []
    start = 0
    end = kernel_size
    while end <= len(signal):
        start = start + stride
        end = end + stride
        sample.append(np.mean(signal[start:end]))
    return np.array(sample)

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдЕрднреА рд╕реНрдЯреЙрдк рдореЛрд╢рди рдореЗрдВ рд╣реИред

рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЯреАрдмреА рд╣реЛ рддреЛ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдбрд╛рдЙрдирд╕реИрдВрдкрд▓рд┐рдВрдЧ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЬреЛ рдХрд░рддрд╛ рд╣реВрдВ рдЙрд╕рдореЗрдВ рднреА рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХреЗ рдЯреАрдмреА рд╣реИрдВ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдЕрддрд┐рд╡реНрдпрд╛рдкреА рд╡рд┐рдВрдбреЛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди "рдлрд┐рдХреНрд╕" рд╕рд┐рд░реНрдл рдПрдХ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдФрд░ рдЙрдкрдЬ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рд╕реНрд▓рд╛рдЗрд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдиреЗ рд╕реЗ рдХрд╛рдлреА рдорджрдж рдорд┐рд▓реЗрдЧреАред

рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП!

рд╕рд╣рдордд рд╣реВрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╕реНрдЯреЙрдХ рдХреА рдХреАрдорддреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рдВрдбреЛ рд╕рд╣рд╕рдВрдмрдВрдз рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ рд╣реИ

рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдРрд╕реА рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИ!
рдпрд╣ рдорд╕рд▓рд╛ рдХрдм рд╕реБрд▓рдЭреЗрдЧрд╛?
рдзрдиреНрдпрд╡рд╛рдж

'рдЖрдЧреЗ рдХреА рдЪрд░реНрдЪрд╛' рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ 1 рд╕реЗрдХрдВрдб рдХреЗ рд╕рдВрдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдПрдХ рдорд┐рдирдЯ/рдЕрдзрд┐рдХрддрдо/рдФрд╕рдд рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдКрд░реНрдЬрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рд╣реИ рдФрд░ 1-2 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЪреЛрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдкреБрди: рдирдореВрдирд╛рдХрд░рдг рдХреЗ рд╕рд╛рде рдЦреЛ рджреВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 5 рд╕реЗрдХрдВрдб/1 рдорд┐рдирдЯ рдХрд╛ рдкреБрди: рдирдореВрдирд╛рдХрд░рдг рдЗрд╕ рддрдереНрдп рдХреЛ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рдкреНрд░рддрд┐ рджрд┐рди 4k/1k рд╡рд┐рдВрдбреЛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреА рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ 24 рд╡рд┐рдВрдбреЛ рдкреНрд░рддрд┐ рджрд┐рди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдлреЗрдВрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред .

рдЧреНрд░реБрдкрдмреА рдПрд╕реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рди рддреЛ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдФрд░ рди рд╣реА рд░реЛрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рддреЗрдЬрд╝ рд▓рдЧрддрд╛ рд╣реИ (рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде 2.5 рдорд┐рд▓рд┐рдпрди рдШрдВрдЯреЗ рд▓рдВрдмреА рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдП 2 рд╕реЗрдХрдВрдб)ред рдпрд╣ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд░реВрдк рд╕реЗ рддреЗрдЬрд╝ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЬрд╛рдпрдЬрд╛ рд▓рд┐рдпрд╛ред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рддреБрдЪреНрдЫ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╕рд░рд╕рд░реА рдирдЬрд╝рд░ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рд╕рднреА рд░реЛрд▓рд┐рдВрдЧ рд░реВрдЯреАрди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рд░рд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рдЦрд┐рдбрд╝рдХреА рдХреА рд╕реАрдорд╛рдУрдВ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛, рддреЛ рдпрд╣ рдЕрдиреБрд░реЛрдз рдФрд░ #11704 рджреЛрдиреЛрдВ рд╣реА рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рдмрдВрдзрдиреАрдп рд╣реИ рдЬреЛ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкреНрд░реВрд╕ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдЕрд░реНрдз-рдмреЗрдХреНрдб рдкреАрдЖрд░ (рдХреЗрд╡рд▓ рдПрдХ рдПрдорд╡реАрдкреА рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж) рдХреА рд╢реБрд░реБрдЖрдд рдХреА, рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреВрдВрдЧрд╛ред

рджреМрдбрд╝рдирд╛:

import numpy as np
import pandas as pd

data = pd.Series(
    np.arange(100),
    index=pd.date_range('2020/05/12 12:00:00', '2020/05/12 12:00:10', periods=100))

print('1s rolling window every 2s')
print(data.rolling('1s', step='2s').apply(np.mean))

data.sort_index(ascending=False, inplace=True)

print('1s rolling window every 500ms (and reversed)')
print(data.rolling('1s', step='500ms').apply(np.mean))

рдкреИрджрд╛рд╡рд╛рд░

1s rolling window every 2s
2020-05-12 12:00:00.000000000     4.5
2020-05-12 12:00:02.020202020    24.5
2020-05-12 12:00:04.040404040    44.5
2020-05-12 12:00:06.060606060    64.5
2020-05-12 12:00:08.080808080    84.5
dtype: float64
1s rolling window every 500ms (and reversed)
2020-05-12 12:00:10.000000000    94.5
2020-05-12 12:00:09.494949494    89.5
2020-05-12 12:00:08.989898989    84.5
2020-05-12 12:00:08.484848484    79.5
2020-05-12 12:00:07.979797979    74.5
2020-05-12 12:00:07.474747474    69.5
2020-05-12 12:00:06.969696969    64.5
2020-05-12 12:00:06.464646464    59.5
2020-05-12 12:00:05.959595959    54.5
2020-05-12 12:00:05.454545454    49.5
2020-05-12 12:00:04.949494949    44.5
2020-05-12 12:00:04.444444444    39.5
2020-05-12 12:00:03.939393939    34.5
2020-05-12 12:00:03.434343434    29.5
2020-05-12 12:00:02.929292929    24.5
2020-05-12 12:00:02.424242424    19.5
2020-05-12 12:00:01.919191919    14.5
2020-05-12 12:00:01.414141414     9.5
2020-05-12 12:00:00.909090909     4.5
dtype: float64

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ (рдпрд╛ рдпрд╣рд╛рдВ: https://github.com/anthonytw/pandas/tree/rolling-window-step)

рдЬрдмрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рднреА рд░реЛрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЧрдВрднреАрд░ рдХрд╛рдо рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИред рдЬреЛ рдХреЛрдИ рднреА рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдЗрдВрдбреЗрдХреНрд╕рд░ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╡рд┐рдВрдбреЛ рд╕реАрдорд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рд░реЛрд▓рд┐рдВрдЧ_*_рдлрд┐рдХреНрд╕реНрдб/рд╡реЗрд░рд┐рдПрдмрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рд╛рд░рдВрдн рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рди рд╣реЛ рдЬреЛ рдЧреИрд░-рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдирдореВрдирд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХрд░рддрд╛ рд╣реЛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЭрдВрдбрд╛ рдпрд╛ рдХреБрдЫ рдФрд░ рд╕реЗрдЯ рдХрд░реЗрдВ)ред

рдХреНрдпрд╛ рдпрд╣ get_window_bounds() рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╕реНрдЯрдо рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рдирдорд╕реНрддреЗ рд╡рд╣рд╛рдБ, рдореИрдВ рджреВрд╕рд░рд╛ рднреА рд╕реБрдЭрд╛рд╡ рдХреГрдкрдпрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреАред

рдпрджрд┐ рдЖрдк 'рдорд╛рдирдХ' рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпреЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реИрдВ ( ts.rolling(5).max().dropna()[::2] )ред

IIUC рдпрд╣рд╛рдВ рдмрдЪрдд рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдордп рдХреЗ рдПрдХ рдЕрдВрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд╣реЛрдЧреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ nth рдорд╛рди)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдБ рдРрд╕рд╛ рд╣реА рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ: https://stackoverflow.com/questions/63729190/pandas-resample-daily-data-to-annual-data-with-overlap-and-offset

рдкреНрд░рддреНрдпреЗрдХ рдПрдирдПрдЪ рдкреНрд░рддреНрдпреЗрдХ 365рд╡рд╛рдВ рд╣реЛрдЧрд╛ред рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ рдФрд░ рдЪрд░рдг рд╡рд┐рдВрдбреЛ рдЖрдХрд╛рд░ рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдВрд╢ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕реЗрдЯ рд╡рд┐рдВрдбреЛ рдЖрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ "рд╡рд░реНрд╖ рдореЗрдВ # рджрд┐рдиреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ" рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рддрдХ рдорд┐рд▓реЗ рд╣рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЕрд╕рдВрднрд╡ рд╣реИред

рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рднреА рдЗрд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд):

  • рдореЗрд░реЗ рдкрд╛рд╕ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЙрд▓рдо рдФрд░ рдПрдХ рдорд╛рди рдХреЙрд▓рдо рд╡рд╛рд▓рд╛ рдХрд╛рд▓рд╛рдиреБрдХреНрд░рдорд┐рдХ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рд╣реИ, рдЬреЛ рдЕрдирд┐рдпрдорд┐рдд рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреА рддрд░рд╣ рдЬрдм рдПрдХ рдХреБрддреНрддрд╛ рдореЗрд░реА рдЦрд┐рдбрд╝рдХреА рдХреЗ рдиреАрдЪреЗ рд╕реЗ рдЧреБрдЬрд░рд╛ рдФрд░ рдЙрд╕реЗ рдкрд╛рд╕ рд╣реЛрдиреЗ рдореЗрдВ рдХрд┐рддрдиреЗ рд╕реЗрдХрдВрдб рд▓рдЧреЗред рдореЗрд░реЗ рдкрд╛рд╕ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рджрд┐рди рдХреЗ рд▓рд┐рдП 6 рдИрд╡реЗрдВрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЕрдЧрд▓реЗ 2 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдИрд╡реЗрдВрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
  • рдореИрдВ 365 рджрд┐рдиреЛрдВ рдХреА рд░реЛрд▓рд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рд╛рде рдПрдХ рдореАрдЯреНрд░рд┐рдХ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЗрд░реА рдЦрд┐рдбрд╝рдХреА рдХреЗ рд╕рд╛рдордиреЗ рдХреБрддреНрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рдФрд╕рдд рд╕рдордп), рдЬреЛ рд╣рд░ 30 рджрд┐рдиреЛрдВ рдореЗрдВ рд░реЛрд▓ рдХрд░реЗрдЧрд╛

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, dataframe.rolling() API рдореБрдЭреЗ 365 рджрд┐рдиреЛрдВ рдХреА рдЕрд╡рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рдорд╛рдзреНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 30 рджрд┐рдиреЛрдВ рдХреЗ рдорд╛рдиреЛрдВ (рдЬреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рдЧреИрд░-рд╕реНрдерд┐рд░ рд╕рдВрдЦреНрдпрд╛ рд╣реИ) рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред 365 рджрд┐рдиреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЪрдпрдиред

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ 'рдХреБрддреНрддреЗ рдХреА рдШрдЯрдирд╛рдУрдВ' рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ (рдмрд╣реБрдд) рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреАред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ:

In [1]: s = pd.Series(range(5))

In [2]: s
Out[2]:
0    0
1    1
2    2
3    3
4    4
dtype: int64

рдФрд░ рд╣рдо рдХреА рдПрдХ рдЦрд┐рдбрд╝рдХреА рдЖрдХрд╛рд░ 2 рдФрд░ рдХреЗ рдХрджрдо рдЖрдХрд╛рд░ 1 ред рдЗрдВрдбреЗрдХреНрд╕ 0 рдкрд░ рдЗрд╕ рдкрд╣рд▓реА рд╡рд┐рдВрдбреЛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрдВрдбреЗрдХреНрд╕ 1 рдкрд░ рд╡рд┐рдВрдбреЛ рдкрд░ рдХрджрдо, рдЗрдВрдбреЗрдХреНрд╕ 2 рдЖрджрд┐ рдкрд░ рд╡рд┐рдВрдбреЛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ?

In [3]: s.rolling(2, step=1, min_periods=0).max()

Out[3]:
0    0.0
1    NaN # step over this observation
2    2.0
3    NaN # step over this observation
4    4.0
dtype: float64

рдЗрд╕реА рддрд░рд╣ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╕рдордп рдЖрдзрд╛рд░рд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ

In [1]: s = pd.Series(range(5), index=pd.DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-06', '2020-01-09']))

In [2]: s
Out[2]:
2020-01-01    0
2020-01-02    1
2020-01-03    2
2020-01-06    3
2020-01-09    4
dtype: int64

рдФрд░ рд╣рдо рдХреА рдПрдХ рдЦрд┐рдбрд╝рдХреА рдЖрдХрд╛рд░ '3D' рдФрд░ рдХреЗ рдХрджрдо рдЖрдХрд╛рд░ '3D' ред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛?

In [3]: s.rolling('3D', step='3D', min_periods=0).max()

Out[3]:
2020-01-01    0.0       # evaluate this window
2020-01-02    NaN    # step over this observation (2020-01-01 + 3 days > 2020-01-02)
2020-01-03    NaN    # step over this observation (2020-01-01 + 3 days > 2020-01-03)
2020-01-06    3.0      # evaluate this window ("snap back" to this observation)
2020-01-09    4.0      # evaluate this window (2020-01-06 + 3 days = 2020-01-09)
dtype: float64

рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @mroeschke wrt ([3]), рдкрд░рд┐рдгрд╛рдо рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рдореИрдВ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдБред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдиреБрдЧрд╛рдореА рдЦрд┐рдбрд╝рдХреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪрдХрд╛рдВрдХ = 0 рдкрд░ рдпрд╣ -1 рдФрд░ 0 рдкрд░ рдЕрдзрд┐рдХрддрдо рддрддреНрд╡ рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдЕрдзрд┐рдХрддрдо ([0]), рдлрд┐рд░ рдЗрд╕реЗ "1" рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ = 0 рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП + рдЪрд░рдг = 1, рдФрд░ рдЕрдЧрд▓реА рдЧрдгрдирд╛ рдЕрдзрд┐рдХрддрдо ([0,1]), рдлрд┐рд░ рдЕрдзрд┐рдХрддрдо ([1,2]), рдЖрджрд┐ рд╣реЛрдЧреАред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рдХрд╛ рдПрдХ рдЪрд░рдг рдЖрдХрд╛рд░ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрд░реЗрдВрдЧреЗ рдЗрдВрдбреЗрдХреНрд╕ = 0 рд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ = 0 + 2 = 2 (рдЗрдВрдбреЗрдХреНрд╕ 1 рдХреЛ рдЫреЛрдбрд╝рдирд╛), рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЬрд╛рд░реА рд░рдЦрдирд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд▓рдЧрднрдЧ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ NaN рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ "рдХреЗрд╡рд▓" рдЖрдХрд╛рд░ рдореЗрдВ рджреЛрдЧреБрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдорд░реАрдЬ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдПрдХ рдШрдВрдЯреЗ рдХрд╛ 500 рд╣рд░реНрдЯреНрдЬ рдИрд╕реАрдЬреА рдбреЗрдЯрд╛ рд╣реИ, рдЬреЛ рдХрд┐ 1.8 рдорд┐рд▓рд┐рдпрди рдирдореВрдиреЗ рд╣реИрдВред рдЕрдЧрд░ рдореБрдЭреЗ рд╣рд░ рджреЛ рдорд┐рдирдЯ рдореЗрдВ 5 рдорд┐рдирдЯ рдХреА рдЪрд▓рддреА рдФрд╕рдд рдЪрд╛рд╣рд┐рдП, рддреЛ рдпрд╣ рдПрдХ рд╕рд░рдгреА рд╣реЛрдЧреА 30 рдорд╛рдиреНрдп рд╕рдВрдЧрдгрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде 1.8 рдорд┐рд▓рд┐рдпрди рддрддреНрд╡ рдФрд░ 1.8 рдорд┐рд▓рд┐рдпрди NaN рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдоред :-)

рдЕрдиреБрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП, рдЪрд░рдг рдЖрдХрд╛рд░ = 1 рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╡рд┐рдВрдбреЛ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реБрдЪрд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рд╡рд┐рдВрдбреЛ рдХреЛ рдПрдХ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдлрд┐рд░ рджреЛрд╣рд░рд╛рдПрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реБрдЪрд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдлрд┐рд░ 60,000 рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╢рд┐рдлреНрдЯ рдХрд░реЗрдВ, рдлрд┐рд░ рджреЛрд╣рд░рд╛рдПрдВред

рд╕рдордп рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреА рдЯрд┐рдкреНрдкрдгреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдВрдбреЛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рд╣реА рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрд╕рд╣рдорддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ "рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда" (рдЯреАрдПрдо) рддрд░реАрдХрд╛ рд╕рдордп t0 рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рд╕реАрдорд╛ рдореЗрдВ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдвреВрдВрдвреЗрдВ (рдЯреА0-рд╡рд┐рдВрдбреЛ , t0], рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рдлрд┐рд░ рдЪрд░рдг рдЖрдХрд╛рд░ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдРрд╕реА рдХрд┐рд╕реА рднреА рд╡рд┐рдВрдбреЛ рдХреЛ рдлреЗрдВрдХ рджреЗрдВ рдЬрд┐рд╕рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рд╣реЛ (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп, рдбрд┐рдлрд╝реЙрд▓реНрдЯ 1 рдХреЗ рд▓рд┐рдП)ред рд╡рд╣ рдЙрджрд╛рд╣рд░рдг рдкрд┐рдЫрд▓реА рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐рд╕реА рднреА рд╡рд┐рдВрдбреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдореЗрдВ рдмрдбрд╝реЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░рд╛рд▓ рдХреЛ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рднрд▓реЗ рд╣реА рдЖрдк рднреЛрд▓реЗ рддрд░реАрдХреЗ рд╕реЗ рдЧрдгрдирд╛ рдХрд░реЗрдВ (рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдореЗрд░реА рддрд░рд╣ рдЖрд▓рд╕реА рд╣реИрдВ) рдореБрдЭреЗ рдЕрднреА рддрдХ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реИ , рдЪреВрдВрдХрд┐ рдЕрдВрддрд░рд╛рд▓ рдЖрдорддреМрд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдореЗрдВ рдорд╛рдпрдиреЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдмрдбрд╝реЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рд╢рд╛рдпрдж рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ? рдКрдкрд░ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг + рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬреЛ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИред

@anthonytw рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рджрд░рдЕрд╕рд▓, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ step рдХреЛ "рдХрджрдо рд╕реЗ рдмрд┐рдВрджреБ" рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛNaN рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИ, рдореИрдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ NaN рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреА рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ https://github.com/pandas-dev/pandas/issues/15354#issuecomment -278676420 by @jreback рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рд╣реИ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рд╕реНрдерд┐рд░рддрд╛ рд╡рд┐рдЪрд╛рд░ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рд▓рдВрдмрд╛рдИ рд╣реИред рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ NaN рдХреЛ рднреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╢рд╛рдпрдж?), рдФрд░ dropna rolling(..., step=...).func() рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

@mroeschke рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рдмрдирд╛рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдЬрдм рддрдХ рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдиреЛрдЯ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рд╣реИ, рддрдм рддрдХ рдХрд┐рд╕реА рдкрд░ рднреА рдХрдмрд╛рдбрд╝ рд╕реЗ рднрд░реЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рддрд┐рдХреВрд▓ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛ред NaN рд░рдЦрдиреЗ рд╕реЗ рдЖрдзрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдорд╣рдВрдЧреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВред рдЕрдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреБрдЫ рдкреНрд░рдмрдВрдзрдиреАрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХреА рдЧрдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИред рд╡рд╣ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рджрд┐рдпрд╛ рд╣реИ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ, рдФрд░ рд▓рдЧрднрдЧ рдЙрддрдирд╛ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐рд╕реА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реЛрдЧреА рдирд┐рдЧрд░рд╛рдиреА рдЖрд╡реЗрджрди рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ 60000x рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдлрд┐рд░ NaN рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬреЗрдВ? рдкреНрд░рддреНрдпреЗрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреА рд╣реИред рдореИрдВ рдИрд╕реАрдЬреА рддрд░рдВрдЧ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ? рдЦреИрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд╡рд░ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ! рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ 1 рдкреВрд░реНрдг PSD рд╡реЗрдХреНрдЯрд░ (150,000 рддрддреНрд╡) 1.8 рдорд┐рд▓рд┐рдпрди рдмрд╛рд░ (2TB рдбреЗрдЯрд╛) рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрди рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ рдЬрд┐рдирдХреА рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рд╣реИ (34MB)ред рд╕рднреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рд╕рднреА рд░реЛрдЧрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдФрд░ рд░реИрдо рдЦрд░реАрджрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ!

рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП NaN, рдПрдХ рд╕рд╛рд░реНрдердХ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЕрдм рд╕рд╛рд░реНрдердХ NaN рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдкреИрдбрд┐рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рджреНрджреА NaN рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ред

рдЬрдмрдХрд┐ рдореИрдВ рдПрдкреАрдЖрдИ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧреА (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рдереА), рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдЧрд╛ред рдПрдХ рд╣реА рдЖрдХрд╛рд░ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд┐рдпрд╛, рддреЛ рдЪрд░рдг рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдПрдХ рдиреЛрдЯ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдиреБрдХрд╕рд╛рди "рд╕реБрд╕рдВрдЧрдд" рдПрдкреАрдЖрдИ рд╣реЛрдиреЗ рдХреЗ рдХрд┐рд╕реА рднреА рд▓рд╛рдн рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИ (рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рдереА, рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ)ред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рдирд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкрдВрдЧреБ рдмрдирд╛ рджреЗрдЧрд╛, рдпрд╣ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рднреА рдирд╣реАрдВ рд╣реИ (рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рд▓рд╛рдЧрдд рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдмрдбрд╝рд╛ рдХрд╛рд░рдХ рд╣реИ)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ebran picture ebran  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

matthiasroder picture matthiasroder  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Ashutosh-Srivastav picture Ashutosh-Srivastav  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

andreas-thomik picture andreas-thomik  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amelio-vazquez-reina picture amelio-vazquez-reina  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ