Как рассчитать средний разрыв между датами для определенного идентификатора в python? - PullRequest
2 голосов
/ 13 июля 2020

Мой входной фрейм данных выглядит примерно так: здесь для каждой компании у нас может быть несколько идентификаторов продаж, и каждый идентификатор продаж имеет уникальную дату создания. я ожидаю вывода в этом формате:

Name   Mean_createdate_gap
ABC    4.66 
XYZ    5.5    

объяснение:

 ABC =>  (3+6+5)/3 = 4.66 (cumulative diff between dates)
 XYZ =>  (6+8+4+4)/4 = 5.5

Для этого сначала нам может потребоваться отсортировать данные с последующей группировкой по названию компании. Не знаю, как мне это реализовать.

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Здесь вы go:

df['Create Date'] = pd.to_datetime(df['Create Date'], format='%d-%m-%Y')
res = df.sort_values(by='Create Date')\
    .groupby('CompanyName', sort=False)['Create Date']\
    .agg(lambda cd : cd.diff().map(lambda dt: dt.days).mean()).reset_index()\
    .rename(columns={'CompanyName': 'Name', 'Create Date': 'Mean_createdate_gap'})
print(res)

Вывод

  Name  Mean_createdate_gap
0  ABC             4.666667
1  XYZ             5.500000
2 голосов
/ 13 июля 2020

Скрытый Create столбец до даты и времени

df['Create'] = pd.to_datetime(df['Create'], format='%d-%m-%Y')

Сортировать по этому столбцу

df = df.sort_values(by=['Create'])

Выполнить групповое агрегирование с кумулятивным средним значением

df.groupby('CompanyName')['Create'].agg(lambda x: x.diff().abs().mean())

CompanyName
ABC   4 days 16:00:00
XYZ   5 days 12:00:00
Name: Create, dtype: timedelta64[ns]
...