您的位置:首页 > 其它

pandas的groupby以及pivot_table用法——以计算恩格尔系数为例

2018-05-23 17:51 453 查看

数据:来源于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这个方法很小众!

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: