数値ではなく、ローリング・ウィンドウ内の最初の値を取ります

pierre_j:

この質問は、私が以前に尋ねた1次のここでは、それが数値に答えました。

私は時代のタイプのデータと比較し、今この第二1を引き上げます。

下記の例は、単純に見えますが、私は実際にである窓持つ可変サイズをウィンドウの1行目に興味を持って、私はなりますが、この定義を使用することを技術を探しています。

import pandas as pd
from random import seed, randint

# DataFrame
pi1h = pd.period_range(start='2020-01-01 00:00+00:00', end='2020-01-02 00:00+00:00', freq='1h')

seed(1)
values = [randint(0, 10) for ts in pi1h]

df = pd.DataFrame({'Values' : values, 'Period' : pi1h}, index=pi1h)

# This works (numeric type)
df['first'] = df['Values'].rolling(3).agg(lambda rows: rows[0])

# This doesn't (Period type)
df['OpeningPeriod'] = df['Period'].rolling(3).agg(lambda rows: rows[0])

2番目のコマンドの結果

DataError: No numeric types to aggregate

してください、任意のアイデア?任意の助けてくれてありがとう!カテゴリーで探します、

グジェゴシSkibinski:

サイズのローリング・ウィンドウの最初の行32列電流以上であることを意味行、 -ちょうど使用pd.Series.shift(2)

df['OpeningPeriod'] = df['Period'].shift(2)

可変サイズの場合(例- Iのために取ったValuesこの可変サイズと列):

import numpy as np

x=(np.arange(len(df))-df['Values'])

df['OpeningPeriod'] = np.where(x.ge(0), df.loc[df.index[x.tolist()], 'Period'], np.nan)

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=384284&siteId=1