如何合并多个Groupby数据帧并更改列名--获取NA



为了提供一些上下文,我只是在学习python和编码。我们得到了泰坦尼克号的数据。我在网上搜索答案,但找不到我想要的东西。所以这就是我现在问的原因。

我们需要按班级计算存活率。然后返回数据的输出。

我想创建一个Dataframe,它以类为行名,列为"Average"one_answers"Count",意思是每个类的平均存活率和存活个体的计数。

我知道我可以做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"))

这是它生成的表格

但我想添加Average和Count的列名(可能是Passenger Class,这取决于我是否使用"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"])

这也没有太大变化。

对于这种情况,您不需要联接,而是可以执行:

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

最新更新