pandas基础操作(二):分组+聚合+数据io+时间序列

一、pandas索引

df=pd.DataFrame(np.random.randon(4,3),columns=['one','two','three'])
df.index.name=row   #将数组的行索引命名为row
df.columns.name=col

#判断是否有重复索引
s=pd.Series(np.arange(5),index=list('abcda')) #创建重复索引
s.index.is_unique()   #判断
s.index.unique()  #输出不重复的索引数组

#多级索引
a=[['a','b','a','c','d','d'],[1,2,3,3,2,1]]
t=list(zip(*a))   #将会输出[('a',1),('b',2),('a',3),('c',3),('d',2),('d',1)]
index=pd.MultiIndex.from_tuples(t,names=['level1','level2'])
s=pd.Series(np.random.randon(7),index=index)

df=pd.DataFrame(np.random.randon(1,10,(4,3)),index=[['a','b','a','b'],[1,2,1,3]],columns=[['one','two','one'],['blue','yellow','blue']])
df.index.names=['row1','row2']
df.columns.names=['col1','col2']
df2=df.swaplevel('row1','row2')  #交换索引
df2.sortlevel(0)  #根据一级索引进行排序,若为1则是根据二级索引进行排序
df.sum(level=0)   #根据一级索引进行求和,若为1则是根据二级索引进行求和

#将数组中的某一列变成索引值
df.set_index('c')
df2=df.set_index(['c','b'])  #设置二级索引,数组中c列值为一级索引,b列值为二级索引
df2.reset_index()   #重新变成原来的数据
df2.reset_index().sort_index('columns')  #reset之后,按列索引进行重新排序

二、分组计算

理论:分组计算三部曲:1.拆分(根据什么进行分组)2.应用(每个分组进行什么计算)3.合并(把每个分组的计算结果合并起来)
在这里插入图片描述

df['data1'].groupby(df['key1']).mean()

#自己创建一个key(分组依据)
key=[1,1,2,2,1]
df['data1'].groupby(key).mean()

#多级索引
df['data1'].groupby(data['key1'],data['key2']).size()
df.unstack()  #转换成dataframe的数据类型

#可以不指定对某一个列进行运算,即对数组中所有的数值型数据进行计算,字符型数据忽略
df.groupby(data['key1']).sum()

#通过字典进行分组
mapping={
   'a':'blue','b':'orange','c':'blue'}
df.groupby(mapping,axis=1).sum()   #将数组df的列索引与mapping进行一一对应

#通过函数进行分组
def _group_key(idx):
	print idx
	return(len(idx))    
df.groupby(_group_key).size()   #将数组df的行索引传进函数_group_key中,根据行索引的长度进行分类,分类的值是行索引的长度
df.groupby(len).sum(
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值