Предположим, что у меня есть следующая таблицаСложные слияния на основе даты начала и окончания панд
import pandas as pd, datetime
table = [[datetime.datetime(2015, 1, 1), 1],
[datetime.datetime(2015, 1, 27), 1],
[datetime.datetime(2015, 1, 31), 1],
[datetime.datetime(2015, 2, 1), 1],
[datetime.datetime(2015, 2, 3), 1],
[datetime.datetime(2015, 2, 15), 1],
[datetime.datetime(2015, 2, 28), 1],
[datetime.datetime(2015, 3, 1), 1],
[datetime.datetime(2015, 3, 17), 1],
[datetime.datetime(2015, 3, 28), 1],
[datetime.datetime(2015, 4, 12), 1],
[datetime.datetime(2015, 4, 28), 1]]
df1 = pd.DataFrame(table, columns=['Date', 'Id'])
df2 = df1.copy()
df2['Id'] = 2
df = df1.append(df2)
table2 = [[1, datetime.datetime(1900, 1, 1), datetime.datetime(2015, 2, 28), 2, 20],
[1, datetime.datetime(2015, 3, 1), datetime.datetime(3000, 1, 1), 4, 25],
[2, datetime.datetime(1900, 1, 1), datetime.datetime(3000, 1, 1), 2, 20]]
df3 = pd.DataFrame(table2, columns=['Id', 'Start', 'End', 'Fix', 'Performance'])
редактировать В df3
, таблица будет сгруппирована по Id
. То есть первые две строки действительны для Id = 1
, а последние для Id = 2
.
Вопрос сейчас; есть способ добавить Fix
и Performance
в виде столбцов к df
таким образом, чтобы элементы соответствующих столбцов находились в строках, где Start
и End
действительны, как определено в Date
? Это означает, что моя таблица будет выглядеть
Date Id Fix Performance
0 2015-01-01 1 2 20
1 2015-01-27 1 2 20
2 2015-01-31 1 2 20
3 2015-02-01 1 2 20
4 2015-02-03 1 2 20
5 2015-02-15 1 2 20
6 2015-02-28 1 2 20
7 2015-03-01 1 4 25
8 2015-03-17 1 4 25
9 2015-03-28 1 4 25
10 2015-04-12 1 4 25
11 2015-04-28 1 4 25
0 2015-01-01 2 2 20
1 2015-01-27 2 2 20
2 2015-01-31 2 2 20
3 2015-02-01 2 2 20
4 2015-02-03 2 2 20
5 2015-02-15 2 2 20
6 2015-02-28 2 2 20
7 2015-03-01 2 2 20
8 2015-03-17 2 2 20
9 2015-03-28 2 2 20
10 2015-04-12 2 2 20
11 2015-04-28 2 2 20
Спасибо, Tingis
Как вы выбираете Fix и Performance, когда дата падает через два интервала, определенные рядами в df3? (например, взять данные 2001-01-01, соответствие линии 1 и 3) –
Хм, не совсем уверен, что я следую вашему вопросу. Но 'Start' в' df3' отмечает, что дата, когда 'Fix' и' Performance' действительны, а 'End' в' df3' отмечает последнюю дату, когда они действительны. Надеюсь, что это ответ на ваш вопрос! – Tingiskhan
@Tingiskhan три '[Start, End]' интервала в 'df3' перекрываются, есть двусмысленность. – galath