Одной из идей может быть создание столбца Field_group, имеющего номер для другой группы полей.С вашим примером:
df['Field_group'] = df['Field'].apply(lambda field: 1 if field in ['Product', 'Category'] else 2)
Если у вас более 2 групп полей, вы можете что-то вроде:
def associate_group_number (field):
if field in ['Product', 'Category']: return 1
if field in ['Size','blabla']: return 2
if field in ['blo','bli','blu']: return 3
df['Field_group'] = df['Field'].apply(associate_group_number)
Теперь, когда у вас есть номер группы, вы можете использовать groupby
и shift
для создания столбца «Конец», например:
df['End'] = df.groupby('Field_group')['Start'].shift(-1)
И поскольку вы хотите заполнить последнюю строку End
каждой группы временем, соответствующим этой строке в Start
(если я хорошо понял), вы можете использовать fillna
:
df['End'] = df['End'].fillna(df['Start'])
Вы можете даже добавить .fillna(df['Start'])
после shift(-1)
предыдущей строки кода, чтобы сделать это в одну строку, это работает(здесь это должно было быть объяснено)
Наконец, вы можете удалить столбец, созданный с помощью:
df = df.drop('Field_group',1)