Объедините два кадра данных с учетом дат

#python #pandas #dataframe #aggregate

Вопрос:

У меня есть два кадра данных, которые мне нужно объединить. Первая таблица содержит несколько строк с одним и тем же идентификатором, но каждая из них имеет свою собственную отметку времени. Во второй таблице также есть те же идентификаторы, но у каждого из них также есть свои собственные метки времени.

ПЕРВЫЙ СТОЛ:

ID Дата Описание
1 2/1/2021 asdfadsf
1 5/1/2021 asdfasf
1 7/1/2021 freafasf
2 4/1/2021 афаэртафа
2 6/1/2021 вадфгаса
3 3/1/2021 вадсгвадв
3 8/1/2021 cafdsfafa
4 5/1/2021 aewrqafdg

ВТОРАЯ ТАБЛИЦА:

ID Дата Количество Проданных
1 12/18/2020 1
1 1/15/2021 3
1 3/23/2021 13
1 4/15/2021 5
1 4/28/2021 32
1 5/10/2021 6
1 6/15/2021 3
2 2/1/2021 3
2 3/1/2021 5
2 3/15/2021 6
2 5/12/2021 13
2 5/11/2021 2
2 5/21/2021 32
3 1/1/2021 14
3 2/1/2021 5
3 4/1/2021 23
3 5/1/2021 54
4 2/1/2021 12
4 3/1/2021 6
4 4/1/2021 23

Цель состоит в том, чтобы выполнить левое соединение по идентификатору, если число, проданное до даты в первой таблице, суммируется и добавляется в виде столбца. Таким образом, идентификатор «1» для даты «2/1/2021» из первой таблицы будет принимать сумму всех номеров идентификатора «1», проданных во второй таблице, которые произошли до или после «2/1/2021». Таким образом, результат для этого будет равен 4. Для идентификатора «1» для даты «5/1/2021» в первой таблице будет взята сумма всех номеров идентификатора «1», проданных во второй таблице, которые произошли до или после «2/1/2021». Результатом этого будет 54.

Выходной кадр данных будет выглядеть следующим образом.

ID Дата Описание Количество Проданных
1 2/1/2021 asdfadsf 4
1 5/1/2021 asdfasf 54
1 7/1/2021 freafasf 63
2 4/1/2021 афаэртафа 14
2 6/1/2021 вадфгаса 61
3 3/1/2021 вадсгвадв 19
3 8/1/2021 cafdsfafa 96
4 5/1/2021 aewrqafdg 41

Комментарии:

1. Я предположил dataframe , что вы имели в pandas виду фрейм данных, если это неверное предположение, пожалуйста, обновите теги соответствующим образом.

2. Да, я имею в виду фрейм даты панд. Спасибо!

3. пожалуйста, опубликуйте ожидаемый фрейм выходных данных

4. Он был обновлен @sammywemmy

5. это немного сбивает с толку, каков формат даты для обеих таблиц? d-m-y или m-d-y ? вторая таблица выглядит как month-day-year формат

Ответ №1:

 def get_sold(id,date):  return df2[(df2['ID']==id) amp; (df2['Date'].le(date))]['Num Sold'].sum()  for i,v in df1.iterrows():  df1.loc[i,'Total Sold'] = get_sold(v.ID,v.Date)  

введите описание изображения здесь