У меня есть этот упрощенный набор данных, в котором есть дата и идентификатор. Я хотел бы иметь общее количество столбцов с подсчетом идентификаторов, но так как я создаю предсказание модели ML, я хочу только принять во внимание записи до фактического события.
Я хотел бы подсчитать для каждой записи только те, где Date меньше. Что-то вроде: подсчитайте все записи, в которых идентификатор один и те же, и укажите дату <= дату текущей строки и добавьте столбец с этим значением.
ID | Date |
1 | 3/4/10 |
1 | 3/6/10 |
1 | 1/2/10 |
2 | 5/5/10 |
2 | 5/6/10 |
Результат
ID | Date | Total
1 | 3/4/10 | 1
1 | 3/6/10 | 2
1 | 1/2/10 | 0
2 | 5/5/10 | 0
2 | 5/6/10 | 1
Большое спасибо!
Предполагая, что вы используете Pandas, сначала измените столбец Date
на datetime
затем отсортируйте по ID
затем Date
:
df = pd.DataFrame({'ID':[1,1,1,2,2], 'Date':['3/4/10','3/6/10','1/2/10','5/5/10','5/6/10']})
df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values(['ID','Date'])
Теперь подсчитайте число Date
d на ID
, сделайте счетчик np.arange
с np.arange
и конвертируйте в pd.Series
. Уложите результаты и вуаля:
df['Total'] = (df
.groupby('ID')
.count()['Date']
.apply(np.arange)
.apply(pd.Series)
.stack()
.values)
print(df.sort_index())
Date ID Total
0 2010-03-04 1 1.0
1 2010-03-06 1 2.0
2 2010-01-02 1 0.0
3 2010-05-05 2 0.0
4 2010-05-06 2 1.0
Вот упрощенный псевдокод, который может быть реализован либо с помощью itertools
либо с помощью pandas
:
ID
Date
Total
столбец - порядковый номер даты.определите функцию для проверки даты. используйте, например.
def DateOrderChecker(input):
truncatedInput = input[:n]
trunflip = truncatedInput.reverse()
trunFinal = (trunflip[:v]).reverse()
где n - char. в конце даты, а v - раньше. так что вы останетесь с "5/5/10"
теперь делай
month, day, year = trunFinal.split("/")
и, наконец, введите строку if для сравнения (год/месяц/день) <(HeldMonth/HeldDay/Heldyear)
рейтинг важности год> месяц> день