2015-07-10 76 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

相關問題