4Pandas统计分析基础二

1、groupby方法

groupby方法可以根据索引或字段对数据进行分组。

格式为:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

import pandas as pd
import numpy as np 
df = pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['yes','no','yes','yes','no'],'data1':np.random.randn(5),'data2':np.random.randn(5)}) print(df) 
grouped = df['data1'].groupby(df['key2']) 
grouped = df['data1'].groupby(df['key1']) 
print(grouped.size())
print(grouped.mean())

输出结果:

1.1按列名分组

 

df = pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['yes','no','yes','yes','no'],'data1':np.random.randn(5),'data2':np.random.randn(5)}) print(df) # grouped = df['data1'].groupby(df['key1'])
# print(grouped.size()) 
# print(grouped.mean()) 
grouped = df.groupby('key2').mean() 
print(grouped)

1.2按列表或元素进行分组

df = pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['yes','no','yes','yes','no'],'data1':np.random.randn(5),'data2':np.random.randn(5)}) print(df) 
wlist = ['w','w','y','w','y'] 
df1 = df.groupby(wlist).sum() 
print(df1)

1.3 按字典分组

df = pd.DataFrame(np.random.normal(size=(6,5)),index=['a','b','c','A','B','C']) 
print(df) 
wdich = {'a':'one','b':'two','c':'three','A':'one','B':'two','C':'three'} 
print('分组后:\n',df.groupby(wdich).sum())

输出结果:

 

1.4 按函数分组

def jud(x): 
  if x>=0: 
   return 'a' 
  else: 
   return 'b' 
df = pd.DataFrame(np.random.randn(4,4)) 
print(df) 
print(df.groupby(df[3].map(jud)).sum())

输出结果:

 

1.5、常用的聚合函数

 

1.6 transform方法

可以将运算分布到每一行

data = pd.read_excel('data//testdata.xls') 
print(data.head())
d = data.groupby(['性别','是否吸烟'])['血小板计数'].transform('mean').sample(5) 
print(d)

输出结果:

 

二、数据的透视表

1、pivot_table

默认计算平均值

data = pd.DataFrame({'k1':['a','b','a','a','c','b','a','b'],'k2':['one','two','one','two','one','three','three','one'],'w':np.random.rand(8),'y':np.random.randn(8)}) 
print(data)
d = data.pivot_table(index='k1',columns='k2',aggfunc='sum') 
print(d)

2、交叉表(crosstab)

注:margins=True表示加一列汇总项

data = pd.DataFrame({'k1':['a','b','a','a','c','b','a','b'],'k2':['one','two','one','two','one','three','three','one'],'w':np.random.rand(8),'y':np.random.randn(8)})
#print(data) 
d = pd.crosstab(data.k1,data.k2,margins=True) 
# margins表示加一列汇总项 
#d = pd.crosstab(data.k1,data.k2) 
print(d)

输出结果:

 

二、Pandas的可视化

1、需要在pycharm上安装matplotlib第三方插件,(File-Setting)

 

1、Series的plot的绘制折线

data = pd.Series(np.random.normal(size=10)) print(data) data.plot() #Jupyter plt.show()#如果用的是Pycharm,则需要show()

2、DataFrame的plot的方法绘图

df = pd.DataFrame({'normal':np.random.normal(size=50),'gamma':np.random.gamma(1,size=50)}) df.plot() plt.show()

3、柱状图

一般用来描述各类别之前的关系,plot函数中加入参数(kind='bar'),也可以绘制水平柱状图( kind='barh')

stu = {'name':['小明','王芳','赵平','李红','李涵'], 'sex':['male','female','female','female','male'], 'year':[1996,1997,1994,1999,1996]} 
data = pd.DataFrame(stu) 
#性别的个数 
print(data['sex'].value_counts()) 
#性别的个数以柱状图的形式表示 data['sex'].value_counts().plot(kind='bar',rot=30) 
plt.show()

输出结果:

 

4、横向柱状图 barh

如果要 在绘图上显示中文,需要加入下面两行

#用来显示中文标签

plt.rcParams['font.sans-serif'] = ['SimHei']

#用来正常显示负号

plt.rcParams['axes.unicode_minus'] = False
#用来显示中文标签 
plt.rcParams['font.sans-serif'] = ['SimHei'] 
#用来正常显示负号 
plt.rcParams['axes.unicode_minus'] = False 
df = pd.DataFrame(np.random.randint(60,100,size = (3,3)),index = {'小明','小红','小丽'},columns = ['英语','数学','语文']) 
print(df) df.plot(kind = 'barh')
plt.show()

输出结果:

 

5、直方图

用hist方法绘制

#直方图 s = pd.Series(np.random.normal(size = 80)) #bin:(箱子)的个数,也就是总共有几条条状图 s.hist(bins = 15,grid = False) plt.show()

 

6、散点图

散点图主要用来表现数据之间的规律。

通过plot函数的kind = 'scatter'可以进行绘制

a = np.arange(10) 
wd = pd.DataFrame(a,columns=['A']) 
wd['B'] = 2*wd['A']+4 print(wd) wd.plot(kind='scatter',x='A',y='B') 
plt.show()

输出结果:

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值