Вопрос состоит в том, чтобы для каждой строки в одной группе подсчитывать количество дел, которые были выполнены в течение последнего года текущей строки.
Набор данных (df) выглядит следующим образом:
ID Date
abc 07/12/16
abc 02/04/17
abc 02/13/17
abc 02/16/19
xyz 11/03/14
xyz 11/06/14
xyz 02/17/16
Моя мысль: сначала создать столбец lastyr: df ['date'] - timedelta (days = 365));затем сравните каждую строку со всей группой, посчитайте, сколько даты в группе> = lastyr и
Я пытался определить функцию в python, например:
# Create the dataframe
d = {'ID': ['abc', 'abc', 'abc', 'abc', 'xyz', 'xyz', 'xyz'],
'Date': ['07/12/16', '02/04/17', '02/13/17', '02/16/19', '11/03/14', '11/06/14', '02/17/16']}
df = pd.DataFrame(data=d)
df['Date'] = df['Date'].apply(pd.to_datetime)
df_1 = df
# df_1 is same as df. I tried to compare each row in df to whole column in df_1.
# Define and apply the function
def lastyear(row):
curr = row['Date']
lastyr = curr - datetime.timedelta(days=365)
if df['ID'] == df_1['ID']: # The compare is for same ID.
return (df_1['Date'] < curr) & (df_1['Date'] >= lastyr)
df.apply(lastyear, axis=1).groupby(['ID']).count()
Однако он возвращает все ложные значения.Я думаю, это потому, что он по-прежнему сравнивает каждую строку в двух фреймах данных, но я не знаю, как переписать его, чтобы сравнить каждую строку со всем столбцом.
Желаемый результат будет:
Group Date Count # of cases happened in last year
abc 07/12/16 0
abc 02/04/17 1
abc 02/13/17 2
abc 02/16/19 0
xyz 11/03/14 0
xyz 11/06/14 1
xyz 02/17/16 0