У меня есть набор данных, который выглядит следующим образом:
File_no A B Date Batch State
0 1 2 3 23-1-2019 2 3
1 2 7 6 23-1-2019 2 4
2 3 9 2 24-1-2019 1 2
3 5 6 3 24-1-2019 2 3
4 6 4 3 24-1-2019 1 4
5 8 2 3 25-1-2019 1 4
Я хочу сгруппировать столбцы данных «A» и «B» на основе даты и партии. Затем выполните смещение строк этих столбцов на основе последовательности номеров файлов. Например, в приведенном выше файле данных № 4 отсутствует.
Я могу выполнить функцию смены, но я не могу сделать это для каждой группы в отдельности.
Например, файлы 6 и 8 не в последовательности, но имеют разные даты. Таким образом, сдвиг не должен выполняться, потому что отсутствует последовательность.
diff = data['File_no'].diff().ne(1).cumsum()
grouped=data.groupby(['Date','Batch'])
grouped.apply(lambda data: data.groupby(diff)['A','B'].shift())
Это выполняет сдвиг, когда есть пропущенная последовательность и не учитывает группы.
Ожидаемый результат:
File_no A B Date Batch State
0 1 Nan Nan 23-1-2019 2 3
1 2 2 3 23-1-2019 2 4
2 3 9 2 24-1-2019 1 2
3 5 Nan Nan 24-1-2019 2 3
4 6 6 3 24-1-2019 1 4
5 8 2 3 25-1-2019 1 4