Как объединить несколько фреймов данных Groupby и изменить имена столбцов - Получение NA - PullRequest
0 голосов
/ 27 февраля 2020

Просто, чтобы дать некоторый контекст, я просто изучаю python и кодирую. Нам дали данные о Титани c. Я ищу в Интернете ответ и не могу точно найти то, что искал. Вот почему я сейчас спрашиваю.

Нам нужно найти коэффициент выживаемости по классам. И затем вернуть вывод данных.

Я хочу создать Dataframe, который имеет класс в качестве имен строк и столбцы «Среднее» и «Количество», означающие среднюю выживаемость каждого класса и количество выживших людей.

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

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

Так что это был мой начальный код

Survival_Class_Avg = pd.DataFrame(titanic.groupby(["pclass"])["survived"].mean())
Survival_Class_Count = pd.DataFrame(titanic.groupby(["pclass"])["survived"].count())

Surivval = pd.DataFrame(Survival_Class_Avg.copy().merge(Survival_Class_Count.copy(), how = "left", left_on = "pclass", right_on = "pclass"))

Это таблица, которую он производит

Но я бы хотел добавить имена столбцов «Среднее» и «Количество» (может быть, класс пассажира, в зависимости от того, использую ли я «as_index = false». Но когда я это сделаю, в моих столбцах появится NaN.

Surivval = pd.DataFrame(Survival_Class_Avg.copy().merge(Survival_Class_Count.copy(), how = "left", left_on = "pclass", right_on = "pclass"), columns = ["Average", "Count"])

Это таблица, заполненная NaNs

Я также попробовал:

Survival_Class_Avg = pd.DataFrame(titanic.groupby(["pclass"], as_index = False)["survived"].mean())
Survival_Class_Count = pd.DataFrame(titanic.groupby(["pclass"], as_index = False)["survived"].count())

Surivval = pd.DataFrame(Survival_Class_Avg.copy().merge(Survival_Class_Count.copy(), how = "left", left_on = "pclass", right_on = "pclass"), columns = ["Class","Average", "Count"])

, которая также не сильно меняется.

1 Ответ

0 голосов
/ 27 февраля 2020

Вам не нужно присоединяться для этого случая, вместо этого вы можете сделать:

titanic.groupby(["pclass"])["survived"].agg(['mean', 'size'])
...