Без образца кадров данных, с которыми вы работаете, я не могу быть уверен, правильно ли понял ваш вопрос. Но, основываясь на описании процедуры чисто-Python,
Я точно знаю, как бы я сделать это с Python - через цикл «выжила» колонку (который является либо 1 или 0), в dataframe , если он равен 1, а затем добавить один к значению индекса, а после того, как все данные пройдены, разделите значение индекса на длину блока данных, чтобы получить вероятность выживания.
вы можете сделать это в Пандах простым письмом
dataframe['survived'].mean()
Это все , Учитывая, что все значения равны 1 или 0, среднее будет числом 1, разделенным на общее количество строк.
Если вы начинаете с кадром данных, который имеет столбцы как survived
, sex
, class
, и так далее, вы можете элегантно совместить это с булевой индексацией панд, чтобы выбрать курсы выживания для различных групп. Позвольте мне использовать Socialcops Titanic passengers data set в качестве примера для демонстрации. Предполагая, что DataFrame
называется df
, если вы хотите, чтобы анализировать только мужчин пассажиров, вы можете получить эти записи как
df[df['sex'] == 'male']
, а затем вы можете взять survived
столбец , что и получить среднее значение.
>>> df[df['sex'] == 'male']['survived'].mean()
0.19198457888493475
Таким образом, сохранилось 19% пассажиров мужского пола.Если вы хотите, чтобы сузить пассажир второго класса мужского пола, вам необходимо объединить условия с помощью &
, например:
>>> df[(df['sex'] == 'male') & (df['pclass'] == 2)]['survived'].mean()
0.14619883040935672
Это становится немного громоздким, но есть более простой способ, который на самом деле позволяет вам сделать несколько категорий одновременно. (Уловка заключается в том, что это несколько более совершенная техника Pandas, и для ее понимания может потребоваться некоторое время.) Используя метод DataFrame.groupby()
, вы можете указать Pandas на группировку строк фрейма данных в соответствии с их значениями в определенных столбцах. Например,
df.groupby('sex')
говорит панды сгруппировать строки по признаку пола: все мужчины пассажирские записи находятся в одной группе, и всех женщин, пассажирские записи в другой группе. То, что вы получаете от groupby()
, не является DataFrame
, это особый вид объекта, который позволяет применять функции агрегации, то есть функции, которые берут целую группу и превращают ее в одно число (или что-то еще). Так, например, если вы сделаете это
>>> df.groupby('sex').mean()
pclass survived age sibsp parch fare \
sex
female 2.154506 0.727468 28.687071 0.652361 0.633047 46.198097
male 2.372479 0.190985 30.585233 0.413998 0.247924 26.154601
body
sex
female 166.62500
male 160.39823
вы видите, что для каждого столбца, панды занимают среднее по записям мужчин-пассажиров всех значений этого столбца, а также по всем записям женского пассажира. Все, что вы заботитесь о здесь является уровень выживаемости, поэтому просто использовать
>>> df.groupby('sex').mean()['survived']
sex
female 0.727468
male 0.190985
Одно большое преимущество этого является то, что вы можете дать больше, чем один столбец группе, если вы хотите взглянуть на небольшие группы. Например, пол и класс:
>>> df.groupby(['sex', 'pclass']).mean()['survived']
sex pclass
female 1 0.965278
2 0.886792
3 0.490741
male 1 0.340782
2 0.146199
3 0.152130
(вы должны дать groupby
список имен столбцов, если вы даете больше, чем один)
О, да, я даже не думал о том, чтобы просто взять на себя выживание ... Я пытался найти способ использовать groupby() в этой проблеме, но я все еще нахожу его добрым путают. – Monika
Это сбивает с толку, не волнуйтесь ;-) –