pandas数据处理pivot_table()方法和分组groupby()方法

数据透视图功能,pivot_table()方法

使用pivot_table()方法,提供了数据透视表的功能

第一个参数指定我们需要计算的列,第二个参数指定行标签
aggfunc参数指定对需要计算的列的计算方法,此处用sum
import pandas as pd
# 没有columns数据,header属性设置为None
card_df = pd.read_csv('./train/card_train.txt')
card_df.columns = ['id', 'consume', 'where', 'how', 'time', 'amount', 'remainder']
card_graph = card_df.pivot_table(index=['id'], columns=['how'], aggfunc=[sum])
card_graph.fillna(0, inplace=True)
print(card_graph)

首先需要按照大学生的id进行分组,再按照消费类别进行分组,对分组后的数据,
我们还需要一个加总的方法来得到每一个学生在每一个类别下的总支出,用groupby方法对数据进行分组

groupby()方法

unstack方法,将我们指定的行标签指定维列标签
这样输出后,发现结果中有NAN的数据,我们可以用fillna方法将其转换:
用0值替换NAN值,同时,直接覆盖原来的DataFrame

card_graph = card_df.groupby(['id', 'how'])['amount'].sum()
card_graph = card_graph.unstack('how')
card_graph.fillna(0, inplace=True)
print(card_graph)

下面是计算总和
#对以上得到的结果,我们需要汇总每一行的数据,得到每个学生总的消费金额,具体,
#使用sum()方法,指定axis=1,表示对每一行的数据进行加总,默认为0,将计算的结果赋值到“总计”列,最后用.to_csv()将结果保存起来

card_graph['总计'] = card_graph.sum(axis=1, skipna=False)
card_graph['恩格尔1'] = card_graph['食堂'] / card_graph['总计']
print(card_graph[['食堂', '总计', '恩格尔1']])
card_graph.to_csv('./output/card_train.csv',encoding='utf-8')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值