pandas的groupby以及pivot_table用法——以計算恩格爾係數爲例

數據:來源於Datacastle上的大學生資助預測競賽中的數據,點此百度網盤獲取,密碼爲cdtb。
注:只用到競賽中的一卡通數據

數據描述
一共有一萬多條數據,800多兆,共七個字段,分別是:
【學生ID,消費類別,消費地點,消費方式,消費時間,消費金額,剩餘金額】

Task:
根據該數據,得到如下格式:

solution1: groupby()

data = pd.read_csv('card_train.txt')
data.columns = ['Id','consume','where','how','time','amount','remainder']
data2 = data.groupby(['Id','how'])['amount'].sum()
data2 = data2.unstack('how')
data2.fillna(0,inplace=True)

solution2: pivot_table()

data3 = data.pivot_table('amount',index='Id',columns='how',aggfunc=sum)
# 第一個參數表示要計算的列,第二個參數表示行標籤,第三個參數表示列標籤,aggfunc表示對要計算的列所有采取的計算方法
data3.fillna(0,inplace=True)

兩種solution的輸出結果相同:

有了上面的輸出,接下來就是計算恩格爾係數:Engel coefficient

data3['sum'] = data3.sum(axis=1,skipna=False)
data3['Engle'] = data3['食堂']/data3['sum']
data3.to_csv('hhh.csv',encoding='gbk')

最終結果

總結
1、比較起來,數據透視表的應用給我們解決問題帶來很大的便捷性,所以要熟悉數據透視表在數據處理和分析中的應用;
2、to_csv這個方法很好用,可以避免其他的更復雜的寫入數據的方式;
3、對於數據的統計處理,並不一定只有numpy行,可能pandas更好用;
4、unstack這個方法很小衆!

發佈了37 篇原創文章 · 獲贊 61 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章