Как выбрать похожие(одинаковые или близкие) значения из одного столбца?

#python #pandas

Вопрос:

Извините, наверное, мой вопрос звучит странно, я не формулирую его более понятно. Я попытаюсь объяснить это ниже.

У меня есть a df с двумя столбцами: age и disease . В колонку age входят разные люди в возрасте от 25 до 75 лет. Столбец disease имеет двоичный вывод (0 — здоровый; 1 — больной).

пример:

d = {'age': [25,34,45,67,67,44,55,67,26], 'disease': [1,0,1,0,0,0,0,0,0]}

df = pd.DataFrame(data=d)

Этот фрейм данных крошечный по сравнению с моим.

Мне нужно создать новый df1 с аналогичным распределением по возрасту для двух групп. Это означает, что если я беру, например, больных людей df с возрастом == 25 и возрастом==45, мне нужно брать с собой таких же, если это возможно, или близкого возраста из здоровой группы (в мои df 26 лет и 44 года).

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

Ответ №1:

 # first of all create two separate dataframes of sick and healthy.
sick = df[df['disease']==1]
healthy = df[df['disease']==0]

# get sick ages to numpy
sick_ages = sick['age'].to_numpy()

# filter healthy dataframe with  - 1 year or exactly the same age
near_sick = healthy[(healthy['age'].isin(sick_ages-1)) | (healthy['age'].isin(sick_ages 1)) | (healthy['age'].isin(sick_ages))]

   age  disease
5   44        0
8   26        0

 

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

1. Спасибо, но near_sick содержит 0 в столбце «болезнь» (это означает «здоровый»), а количество строк равно здоровому df, а не больному

2. «Мне нужно взять с собой то же самое, если это возможно или близкого возраста из здоровой группы». Это возвращение близкого возраста из здоровой группы, как вы просили