У меня есть фрейм данных с записями, охватывающими несколько лет:
WarName | StartDate | EndDate
---------------------------------------------
'fakewar1' 01-01-1990 02-02-1995
'examplewar' 05-01-1990 03-07-1998
(...)
'examplewar2' 05-07-1999 06-09-2002
Я пытаюсь преобразовать этот фрейм данных в общий обзор всех войн за год, например:
Year | Number_of_wars
----------------------------
1989 0
1990 2
1991 2
1992 3
1994 2
Обычно я использовал бы что-то вроде df.groupby('year').count()
, чтобы получить общее количество войн за год, но, поскольку я сейчас работаю с диапазонами, а не с установленными датами, этот подход не сработает.
В настоящее время я пишу функцию, которая генерирует список лет, а затем для каждого года в списке проверяет каждую строку в кадре данных и запускает функцию, которая проверяет, находится ли год в диапазоне дат этогоrow (возвращает True, если это так).
years = range(1816, 2006)
year_dict = {}
for year in years:
for index, row in df.iterrows():
range = year_in_range(year, row)
if range = True:
year_dict[year] = year_dict.get(year, 0) + 1
Это работает, но также кажется чрезвычайно запутанным.Так что мне было интересно, что мне не хватает?Каким будет канонический «путь панд» для решения этой проблемы?