Я новичок в Python и Data Science.

У меня есть набор данных с 2 столбцами даты и времени A и B:

df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-15 10:02:18"], 'B': ["2019-03-13 08:12:25", "2019-03-13 10:02:20"], 'C': ['C1', 'C2']})
                     A                    B C
0  2019-03-13 08:12:20  2019-03-13 08:12:25 C1
1  2019-03-15 10:02:18  2019-03-13 10:02:20 C2

И второй набор данных с примерно 500K + строк и я хочу добавить C столбец в этот набор данных

Для упрощения, скажем, у моего второго набора данных есть только один столбец D:

df2=pd.DataFrame({'D': ["2019-03-13 08:12:20", "2019-03-13 08:12:23", "2019-03-13 08:12:24", "2019-03-13 08:12:25", "2019-03-15 10:02:18", "2019-03-15 10:02:19", "2019-03-16 10:02:20"]})
                     D 
0  2019-03-13 08:12:20
1  2019-03-13 08:12:23
2  2019-03-13 08:12:24
3  2019-03-13 08:12:25
4  2019-03-15 10:02:18
5  2019-03-15 10:02:19
6  2019-03-16 10:02:20

Для каждой строки в D я хочу проверить дату, и если она находится между A и B первого набора данных, я хочу дать значение C, указанное в первом наборе данных. И я хочу, чтобы он установил C на NaN, это не между любыми A и B.

                     D  C
0  2019-03-13 08:12:20  C1
1  2019-03-13 08:12:23  C1
2  2019-03-13 08:12:24  C1
3  2019-03-13 08:12:25  C1
4  2019-03-15 10:02:18  C2
5  2019-03-15 10:02:19  C2
6  2019-03-16 10:02:20  NaN

Я не совсем понимаю, как я могу добиться этого, не используя регулярный цикл и итерацию по моему второму набору данных. Не могли бы вы, ребята, показать мне, как лучше всего добиться этого?

0
Arès 24 Окт 2019 в 17:39

1 ответ

Лучший ответ

pd.IntervalIndex, если доступно на ваших пандах, полезно здесь:

df.A = pd.to_datetime(df.A)
df.B = pd.to_datetime(df.B)
s = df.set_index(pd.IntervalIndex.from_arrays(df.A, df.B, closed='both'))['C']

df2['C'] = pd.to_datetime(df2['D']).map(s)

Выход:

                     D    C
0  2019-03-13 08:12:20   C1
1  2019-03-13 08:12:23   C1
2  2019-03-13 08:12:24   C1
3  2019-03-13 08:12:25   C1
4  2019-03-15 10:02:18   C2
5  2019-03-15 10:02:19   C2
6  2019-03-16 10:02:20  NaN
2
Quang Hoang 24 Окт 2019 в 15:15