Операция столбца панд в определенной строке подряд - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть датафрейм для панды:

    second          block
0   1               a
1   2               b
2   3               c
3   4               a
4   5               c

Это последовательные данные, и я хотел бы получить новый столбец, который представляет собой разницу во времени между текущим блоком и следующим повторением.

    second          block     freq
0   1               a         3 //(4-1)
1   2               b         0 //(not repeating)
2   3               c         2 //(5-3)
3   4               a         0 //(not repeating)
4   5               c         0 //(not repeating)

Я попытался получить уникальный список блоков. Затем цикл for, который работает как показано ниже.

for i in unique_block:
    df['freq'] = df['timestamp'].shift(-1) - df['timestamp']

Я не знаю, как получить 0 для индекса строки 1,3,4, так как датафрейм слишком большой. Это не эффективно. Это не работает.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Вы можете использовать shift и transform в своей группе:

df['freq'] = df.groupby('block').second.transform(lambda x: x.shift(-1) - x).fillna(0)
>>> df
   second block  freq
0       1     a   3.0
1       2     b   0.0
2       3     c   2.0
3       4     a   0.0
4       5     c   0.0
0 голосов
/ 04 ноября 2018

Использование

df.groupby('block').second.apply(lambda x : x.diff().shift(-1)).fillna(0)
Out[242]: 
0    3.0
1    0
2    2.0
3    0
4    0
Name: second, dtype: float64
0 голосов
/ 04 ноября 2018

Используйте groupby + diff(periods=-1). Умножьте на -1, чтобы получить соглашение о разнице, и заполните 0. 0. 1004 *

df['freq'] = (df.groupby('block').diff(-1)*-1).fillna(0)

   second block  freq
0       1     a   3.0
1       2     b   0.0
2       3     c   2.0
3       4     a   0.0
4       5     c   0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...