python处理数据 value_counts频数 groupby分类汇总 merge匹配

问题描述:df表是学生的刷卡记录数据,df1表是学生的各个课程的绩点数据,现在要计算每个学生的刷卡频数以及其对应的平均绩点。
解决:先用value_counts计算df表的频数,再用groupby计算每个学生的平均绩点,最后再用merge函数连接。
在这里插入图片描述
在这里插入图片描述

value_counts()计算频数

value_counts是对计算频数的函数需要注意,value_counts生成的结果索引是sfrzh,值是频数,如果需要将索引转化为列还需要转化一下。

import pandas as pd
from datetime import datetime 

df = pd.read_csv(r'G:\zhxy\20190921\tsg.csv')
df.head(15)

#计算Sfrzh频数
tsg_count = df['Sfrzh'].value_counts()
tsg_count.head()
d = pd.DataFrame()#转化为数据框
d['XH_ID'] = tsg_count.index
d['tsg'] = tsg_count.values
d.head(10)
d.shape

可以看到结果,左列为Sfrzh,右列为频数
在这里插入图片描述

groupby分类汇总

下面进行分类汇总,其中参数by就是我们要对谁进行分类汇总
对其分类汇总后是要做什么,就在其后面添加什么函数。我们这里是要求均值,就加mean(),如果是求和就sum,或其它需求。
同样的,groupby的结果也是包含index和一列values

df1 = pd.read_csv(r'G:\zhxy\20190921\term_2.csv')
df1.head()
jd = df1[['XH_ID','JD']].groupby(by='XH_ID').mean()#分类汇总
jd.head()
jd['XH_ID'] = jd.index
jd.head()

在这里插入图片描述

merge匹配

最后进行匹配,如果两个数据表要进行匹配的是列名是相同的,可以不用添加参数,如果不同,需要添加参数left_on,right_on分别对应表要匹配的列名。
参数how默认内连接,把匹配不到的缺失值删掉,可以根据需求设置成外连接。

pd.merge(d,jd)#默认内连接
data = pd.merge(jd,d,how='outer')#外连接
#data = pd.merge(jd,d,left_on='XH_ID',right_on = 'XH_ID',how='outer')#外连接

在这里插入图片描述

发布了16 篇原创文章 · 获赞 9 · 访问量 1044

猜你喜欢

转载自blog.csdn.net/qq_42871249/article/details/102718776