我目前有一个包含许多行和变量的数据框。我想创建一个单行的单独数据框,它是每个变量的平均值。我这样做是为了让我可以轻松地在图表中绘制它。我不确定为什么我的语法不起作用。
这是针对一个特定变量的。如果我可以使用它,那么我可以通过循环将它扩展到所有列。
avg = pd.DataFrame(columns=original.columns.values)
avg['max_yds'].loc[0] = original['max_yds'].mean(axis=0)
在我看来,第一行创建了一个名为“avg”的数据框,它是空的并且包含原始的所有列。这似乎按预期工作。对于第二行,我希望它在'avg'中设置变量'max_yds'的第一行,并将其设置为原始变量'max_yds'的平均值。相反,我得到:Empty DataFrame
谢谢!
答案 0 :(得分:1)
尝试
avg.set_value(0, 'max_yds', original['max_yds'].mean(axis=0))
如果要计算所有列的平均值,为什么不使用
avg = avg.append(original.mean(axis=0), ignore_index=True)
修改强>
原始解决方案的问题在于您使用了一种" chained indexing",这很糟糕。
您在每列中为Series添加值,但DataFrame的索引仍为空。
实际上,如果你添加
avg['max_yds'] = avg['max_yds']
后
avg['max_yds'].loc[0] = original['max_yds'].mean(axis=0)
,您的代码也可以正常运行。
或者您可以在开头指定索引,这也可以解决您的问题。
avg = pd.DataFrame(columns=original.columns.values, index=[0])
但是,不建议这样做。
答案 1 :(得分:1)
您也可以使用loc:
avg.loc[0, 'max_yds'] = original.loc[:, 'max_yds'].mean()
或者,您可以使用pandas.DataFrame.describe
方法轻松检索统计信息。
所以,如果你想要一个具有所有列平均值的系列:
avg = original.describe().loc['mean']
如果您需要预期的输出数据帧:
avg = pd.DataFrame(index = [0], original.describe().loc['mean']).transpose()