文章目录
一、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(