Pandas групповой скользящий список - PullRequest
2 голосов
/ 18 июня 2020

Вот пример кода.

df = pd.DataFrame({'A':  ['2020-04-28','2020-04-28','2020-04-29','2020-04-29','2020-04-30','2020-04-30'],
      'B': ['11-000-000-246_1064461', '30-000-015-488_1191035','11-000-000-246_1064461','30-000-015-488_1191035','30-000-015-488_1191035','11-000-000-246_1064461'],
      'C': [[4700652221, 4700652723],[4700653241], 0, [4700652781, 4700656546],[4700646464, 4700645646],[4700652748, 4700659873, 4700659238]]
     })

И мой фрейм данных выглядит так:

    A           B                       C
0   2020-04-28  11-000-000-246_1064461  [4700652221, 4700652723]
1   2020-04-28  30-000-015-488_1191035  [4700653241]
2   2020-04-29  11-000-000-246_1064461  []
3   2020-04-29  30-000-015-488_1191035  [4700652781, 4700656546]
4   2020-04-30  30-000-015-488_1191035  [4700646464, 4700645646]
5   2020-04-30  11-000-000-246_1064461  [4700652748, 4700659873, 4700659238]

Я попытался получить новый столбец с именем D, содержащий массив всех C элементы массива в скользящем окне в течение 2 дней с этим кодом, но он не сработал:

df = df.groupby(['A','B'])['C'].rolling(2).apply(list).reset_index(name = 'D')

Мне нужно получить что-то вроде этого:

    A           B                       D
0   2020-04-28  11-000-000-246_1064461  Nan
1   2020-04-28  30-000-015-488_1191035  Nan
2   2020-04-29  11-000-000-246_1064461  [4700652221, 4700652723]
3   2020-04-29  30-000-015-488_1191035  [4700652781, 4700656546, 4700653241]
4   2020-04-30  30-000-015-488_1191035  [4700646464, 4700645646, 4700652781, 4700656546]
5   2020-04-30  11-000-000-246_1064461  [4700652748, 4700659873, 4700659238]

1 Ответ

1 голос
/ 19 июня 2020

Используйте DataFrame.groupby в столбце B, затем используйте .transform в столбце C. В этом методе преобразования используйте Series.shift, чтобы сместить столбец, а затем объедините столбец с самим собой:

df['D'] = (
    df.groupby('B')['C']
    .transform(lambda s: s + s.shift(1))
)

df1 = df.drop('C', 1)

# print(df1)
            A                       B                                                 D
0  2020-04-28  11-000-000-246_1064461                                               NaN
1  2020-04-28  30-000-015-488_1191035                                               NaN
2  2020-04-29  11-000-000-246_1064461                          [4700652221, 4700652723]
3  2020-04-29  30-000-015-488_1191035              [4700652781, 4700656546, 4700653241]
4  2020-04-30  30-000-015-488_1191035  [4700646464, 4700645646, 4700652781, 4700656546]
5  2020-04-30  11-000-000-246_1064461              [4700652748, 4700659873, 4700659238]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...