數據:來源於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這個方法很小衆!