Как совместить среднее значение и частоту отсчета в кадре данных pandas? - PullRequest
0 голосов
/ 01 мая 2020

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

train[['Title', 'Survived']].groupby(['Title'], as_index=False).mean().sort_values(by='Survived',ascending=False)

enter image description here

и

train.Title.value_counts(normalize=True)

enter image description here

Есть ли вероятность, что две могут быть объединены, и я вижу одну таблицу в результате? Я хотел бы, чтобы в моей финальной таблице было следующее:

enter image description here

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

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Рассмотрим именованные агрегаты с agg и пользовательским методом, поскольку Series.values_count не предоставляется как его собственное метод. Чтобы избежать столкновения title в именах столбцов, вызовите reset_index в конце вместо as_index=False в начале:

import pandas as pd

train = pd.read_csv(...)
train['title'] = train['name'].str.extract('([A-Za-z]+)\.', expand=False)
train['title'] = train['title'].where(train['title'].isin(['Mrs','Miss','Mr','Master']), 'Others')

def value_counts(g):
    return(g.value_counts())

agg_df = (train.groupby(['title'])
               .agg(survived_mean = ('survived', 'mean'),
                    title_values_counts = ('title', value_counts))
               .sort_values(by='survived_mean', ascending=False)
               .reset_index()
         )

print(agg_df)    
#     title  survived_mean  title_values_counts
# 0     Mrs       0.786802                  197
# 1    Miss       0.676923                  260
# 2  Master       0.508197                   61
# 3  Others       0.441176                   35
# 4      Mr       0.162483                  757
0 голосов
/ 01 мая 2020

IIU C сделать reindex и вернуть его обратно

#df1=train[['Title', 'Survived']].groupby(['Title'], as_index=False).mean().sort_values(by='Survived',ascending=False)
#s=train.Title.value_counts(normalize=True)

df1['Title Freq']=s.reindex(df1.Title).tolist()
...