Как объединить 2 кадра данных в зависимости от того, попадают ли значения в конкретный сегмент? - PullRequest
3 голосов
/ 18 октября 2019

Предположим, у меня есть:

edu_data = [['school', 5, 18], ['college', 19, 23], ['grad-school', 24, 28]] 
edu = pd.DataFrame(edu_data, columns = ['Education', 'Low-Age', 'High-Age']) 
print(edu)
     Education  Low-Age  High-Age
0       school        5        18
1      college       19        23
2  grad-school       24        28

А потом у меня есть еще одна таблица с возрастом людей:

data = [['tom', 5], ['nick', 28], ['juli', 14], ['jack', 30]] 
df = pd.DataFrame(data, columns = ['Name', 'Age']) 
print(df)
   Name  Age
0   tom    5
1  nick   28
2  juli   14
3  jack   30

Как мне получить таблицу, в которой я бы соответствовал df ['Age'] в зависимости от диапазона между edu ["Low-Age"] и edu ["High-Age"]. Если df ['Age'] находится в пределах диапазона, я хотел бы добавить edu ["Education"] к df.

Так что я ожидаю, что мой результат будет:

   Name  Age Education
0   tom    5    school
1  nick   28    grad-school
2  juli   14    school
3  jack   30    NaN

Ответы [ 2 ]

4 голосов
/ 19 октября 2019

pd.cut:

bins = sorted([edu['Low-Age'][0]] + edu['High-Age'].to_list())

df['Education'] = pd.cut(df.Age, bins=bins,
        include_lowest=True,
        labels=edu.Education)

Вывод:

   Name  Age    Education
0   tom    5       school
1  nick   28  grad-school
2  juli   14       school
3  jack   30          NaN
2 голосов
/ 19 октября 2019

Используйте IntervalIndex и map

edu = edu.set_index(pd.IntervalIndex.from_arrays(edu['Low-Age'], edu['High-Age'], closed='both'))

df['Education'] = df.Age.map(edu.Education)

In [488]: df
Out[488]:
   Name  Age    Education
0   tom    5       school
1  nick   28  grad-school
2  juli   14       school
3  jack   30          NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...