如何在 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
我正在研究 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