#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. «Мне нужно взять с собой то же самое, если это возможно или близкого возраста из здоровой группы». Это возвращение близкого возраста из здоровой группы, как вы просили