2015-07-10 487 views
0

搜索后,我不认为这是重复的,但如果它是请让我知道。Python Pandas - 追加数据到特定行和列

我目前有一个数据框与行和变量的数量。我想创建一个单独的数据框,它是每个变量的平均值。我正在这样做,以便我可以轻松地将其绘制在图表中。我不确定为什么我的语法不起作用。

这是一个特定的变量。如果我能得到这个工作,那么我可以将它扩展到所有具有循环的列。

avg = pd.DataFrame(columns=original.columns.values) 
avg['max_yds'].loc[0] = original['max_yds'].mean(axis=0) 

在我的印象中,第一行创建了一个名为“平均”的数据帧里面是空的,并拥有所有列从原来的。这似乎按预期工作。对于第二行,我期望它将变量'max_yds'的第一行设置为'avg',并将其设置为原始变量'max_yds'的变量的平均值。相反,我得到:Empty DataFrame

谢谢!

回答

0

尝试

avg.set_value(0, 'max_yds', original['max_yds'].mean(axis=0)) 

如果要计算意味着所有列,为什么不使用

avg = avg.append(original.mean(axis=0), ignore_index=True) 

编辑:

你原来的解决方案的问题是,你是使用一种“chained indexing”,这是不好的。

您将值添加到每列中的系列,但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]) 

但是,不建议这样做。

+0

谢谢!我将使用第二种方法。 虽然,我仍然不明白为什么我的语法不起作用? (Upvoted - 并未公开显示!) – Jafar

+0

更新了关于您的语法的一些讨论。 – yangjie

0

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

+0

谢谢!我不确定我完全理解为什么我可以向loc传递两个参数,我需要考虑使用'describe'。 (Upvoted - 尚未公开!) – Jafar