Проверка, находится ли значение в текущем ряду Серий панд в запаздывающем окне - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть пандас DataFrame, похожий на тот, что сгенерирован этим кодом:

names = ['steve', 'bob', 'harry', 'jeff'] * 5
df = pd.DataFrame(
    index=pd.DatetimeIndex(start='2018-10-10', end='2018-10-29', freq='D'), 
    data={'value': [x for x in range(20)],
          'names': names,
         }
)
df['roll'] = np.random.randint(1, 6, df.shape[0])

, который выдает данные, которые выглядят так:

            value  names  roll
2018-10-10      0  steve     2
2018-10-11      1    bob     5
2018-10-12      2  harry     4
2018-10-13      3   jeff     2
2018-10-14      4  steve     2
2018-10-15      5    bob     4
2018-10-16      6  harry     1
2018-10-17      7   jeff     2
2018-10-18      8  steve     3
2018-10-19      9    bob     3
...

Я хотел бы добавить еще одинстолбец result, который является логическим, сгруппированным по именам и true, когда значение roll в текущей строке появляется в 10-дневном запаздывающем окне.Т.е. я хочу это:

            value  names  roll  result
2018-10-10      0  steve     2   False
2018-10-11      1    bob     5   False
2018-10-12      2  harry     4   False
2018-10-13      3   jeff     2   False
2018-10-14      4  steve     2    True
2018-10-15      5    bob     4   False
2018-10-16      6  harry     1   False
2018-10-17      7   jeff     2    True
2018-10-18      8  steve     3    True
2018-10-19      9    bob     3   False
...

Я пробовал это:

df['result'] = (
    df.groupby('names').apply(lambda x: x['roll'].isin(x.shift().rolling('10D')['roll']))
)

, что мне кажется логичным, но я получаю NotImplementedError, который указывает на меня здесь: https://github.com/pandas-dev/pandas/issues/11704.

Есть ли у панды способ добраться туда, где я хочу быть?

1 Ответ

0 голосов
/ 29 декабря 2018

Я думаю rolling здесь не нужно

df.reset_index().groupby(['names','roll'])['index'].diff().dt.days<10
Out[49]: 
0    False
1    False
2    False
3    False
4     True
5    False
6    False
7     True
8    False
9    False
Name: index, dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...