import pandas as pd
import numpy as np
df=pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006],
"date":pd.date_range('20130102', periods=6),
"city":['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
"age":[23,44,54,32,34,32],
"category":['100-A','100-B','110-A','110-C','210-A','130-F'],
"price":[1200,np.nan,2133,5433,np.nan,4432]},columns =['id','date','city','category','age','price'])
df
df1=pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006,1007,1008],
"gender":['male','female','male','female','male','female','male','female'],
"pay":['Y','N','Y','Y','N','Y','N','Y',],
"m-point":[10,12,20,40,40,40,30,20]})
df1
df_inner=pd.merge(left=df,right=df1,how='inner',on='id')
df_inner
# 数据清洗,city全部转换为小写,并去除空格
df_inner['city'] = df_inner['city'].str.lower()
df_inner['city'] = df_inner['city'].map(str.strip)
df_inner
# 数据清洗,将date设置为索引
df_inner.set_index(keys=['date'],inplace=True)
df_inner
# 使用与条件进行筛选,条件是年龄大于25岁,并且城市为beijing
df_inner.loc[(df_inner['age']>25) & (df_inner['city']=='beijing')] # 注意运算的优先级
# 使用“或”条件进行筛选,年龄大于25岁或城市为beijing,并按age升序排列
df_inner.loc[(df_inner['age']>25) | (df_inner['city']=='beijing')].sort_values(['age'])
df_inner.loc[(df_inner['age']>25) | (df_inner['city']=='beijing')].sort_values(['age'])['price'].sum() # price求和
df_inner.loc[(df_inner['age']>25) | (df_inner['city']=='beijing')].sort_values(['age'])['city'].count() # city计数
# 还有一种筛选的方式是用query函数。下面是具体的代码和筛选结果。
df_inner.query('city == ["beijing","shanghai"]')
# 分类汇总groupby
df_inner.groupby(by='city').count()
# 对特定的列进行计数汇总
df_inner.groupby(by='city')['id'].count()
df_inner.groupby(by=['city','gender']).count()
# 对汇总后的数据同时按多个维度进行计算
df_inner.groupby(by=['city','gender']).agg([len,np.sum,np.mean])
# 数据透视表
df_pivot = pd.pivot_table(df_inner,index='city',values=['price'],columns=['gender'],aggfunc=[len,np.sum],fill_value=0,margins=True)
df_pivot
# 这里有个核心的问题,即多行多列索引怎么提取,怎么操作,以df_pivot为例
df_pivot.columns
df_pivot.index
df_pivot.iloc[0:2,0:4]