Посчитать разницу между датами

Есть 2 столбца в датафрейме( один - со статусом заявки, другой - дата изменения статуса). В столбце статусов может быть несколько значений, нас интересуют "Объект подключен" и "Поступление заявки". У одного ключа заявки может быть несколько статусов. Хочется посчитать разницу в днях между 2мя указанными статусами, но в лоб не получается сделать, так как появляется ошибка ValueError: cannot reindex from a duplicate axis

    data[data['Статус заявки']=="Объект подключен"]['Дата изменения статуса']

https://docs.google.com/spreadsheets/d/1bVNQUPhTMLyVINFarSq2749PGTUlIF-izDp4SW37AEw/edit#gid=2061710266

еще пробовала

   data.groupby(['_key'])['Дата изменения статуса'].diff(), но возвращает NaT

Ответы (1 шт):

Автор решения: strawdog

Если предварительно почистить ваши данные, то можно отталкиваться от того, что начало и завершение заявки для каждого ключа - это минимальная и максимальная даты соответственно. В таком случае можно попробовать так сделать:

df1 = df[df["Дата изменения статуса"].str.contains("\d")]
df1["Дата изменения статуса"] = pd.to_datetime(df1["Дата изменения статуса"], format='%m/%d/%Y', errors="coerce").dropna()
res = df1.groupby("_key")["Дата изменения статуса"].apply(lambda x: max(x)-min(x))
print(res.head(30))

что выдаст для первых 30 идентификаторов:

_key
15234      0 days
15699      0 days
15712      0 days
15724      0 days
16124      0 days
16127      0 days
18736      0 days
19336      0 days
19638      0 days
20220      0 days
20298      0 days
20319      0 days
20418      0 days
20429      0 days
20476      0 days
21575   1306 days
21576      1 days
22727      0 days
22780     34 days
24588    399 days
24662      0 days
24666      0 days
24737      0 days
24743    253 days
24808      0 days
24826      0 days
24978      0 days
24983    193 days
26098     33 days
26204    755 days
→ Ссылка