如何在 pandas 数据框中组合平均值和计数值频率?

How to combine mean and count value frequency in pandas data frame?

我正在研究 Tianic Data set。我正在根据幸存者的头衔以及每个头衔出现的频率来检查幸存者的频率。

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

train.Title.value_counts(normalize=True)

是否有可能将两个组合起来,结果我看到一个 table?我希望将以下内容作为我的最终 table:

我不确定如何以我想要的方式一起使用聚合函数 count 和 mean 。如果您需要更多信息,请告诉我。

您可以 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()

考虑使用 agg and a user-defined method since 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