添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
return s - (s-300) * 0.5 return s df[ ' after_salary ' ] = df[ ' salary ' ].map(after_salary)
df['salary'].apply(after_salary)
0     650.0
1    1150.0
2     650.0
Name: salary, dtype: float64

随机抽样 take

  • take()  task中的axis参数含义和drop系列的函数一致, 无法使用显示索引
  • np.random.permutation( n)  返回0到n-1之间的乱序序列
  • df = DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B','C'])
    np.random.permutation(3) #返回0-2之间的乱序序列
    array([2, 0, 1])
    # 对原始数据进行打乱,打乱:是对索引打乱
    #对行列索引进行打乱并进行随机抽样抽取前10个
    df.take(indices=np.random.permutation(3),axis=1).take(indices=np.random.permutation(100),axis=0)[0:10]

    数据的分类处理 分组groupby

    数据分类处理的核心:

  • groupby()函数可以进行分组
  • groups属性可以查看分组情况
  • df = DataFrame({'item':['Apple','Banana','Orange','Banana','Orange','Apple'],
                    'price':[4,3,3,2.5,4,2],
                   'color':['red','yellow','yellow','green','green','green'],
                   'weight':[12,20,50,30,20,44]})
    # by 提供了分组条件,通过水果的种类进行分组
    df.groupby(by='item')
    <pandas.core.groupby.groupby.DataFrameGroupBy object at 0x00000271D9577390>
    #查看分组结果
    df.groupby(by='item').groups
    {'Apple': Int64Index([0, 5], dtype='int64'),
     'Banana': Int64Index([1, 3], dtype='int64'),
     'Orange': Int64Index([2, 4], dtype='int64')}

      分组的目的就是为了后续对各个小组的聚合计算

    计算每一种水果的平均价格

    # 计算每一种水果的平均价格
    df.groupby('item').mean()['price']
    # 不推荐使用上面这种,进行了多余计算,浪费运算成本,# 推荐使用下边这种
    df.groupby(by='item')['price'].mean()
    Apple     3.00
    Banana    2.75
    Orange    3.50
    Name: price, dtype: float64

    将每一种水果的平均价格计算出来然后汇总到源数据中

    mean_price = df.groupby('item').mean()['price']
    # 直接将其转成字典
    mean_price_dic = mean_price.to_dict()
    {'Apple': 3.0, 'Banana': 2.75, 'Orange': 3.5}
    # 通过映射,映射到原数据
    df['mean_price'] = df['item'].map(mean_price_dic)

    求出每一种颜色水果的平均重量,将其汇总到源数据中

    # 通过color分组计算平均重量并转成字典,通过color映射汇总到原数据
    df['color_mean_weight'] = df['color'].map(df.groupby(by='color')['weight'].mean().to_dict())

    高级数据聚合

  • 使用groupby分组后,也可以使用transform和apply提供自定义函数实现更多的运算
  • df.groupby('item')['price'].sum() <==> df.groupby('item')['price'].apply(sum)
  • transform和apply都会进行运算,在transform或者apply中传入函数即可
  • transform和apply也可以传入一个lambda表达式
  • # transform返回的是映射后的结果,直接可以汇总到原数据 df.groupby(by='item')['price'].transform(my_mean) 0 3.00 1 2.75 2 3.50 3 2.75 4 3.50 5 3.00 Name: price, dtype: float64 # apply返回的是没有映射的结果,需要通过map映射才能汇总到原数据 df.groupby('item')['price'].apply(my_mean) Apple 3.00 Banana 2.75 Orange 3.50 Name: price, dtype: float64

    读取type-.txt文件数据

  • header 参数header默认是将数据第一行作为列索引,指定None后使用隐式索引
  • sep 参数sep指定数据通过什么分割
  • # 如果我们只需要哈登在主客场和不同胜负情况下的得分、篮板与助攻三项数据
    df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'])

    aggfunc参数

    设置对数据聚合时使用的函数

  • 当我们未设置aggfunc时,它默认aggfunc='mean'计算均值
  • # 想获得哈登在主客场和不同胜负情况下的总得分、总篮板、总助攻时:
    # 将aggfunc参数设为sum,就是对数据求和
    df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'], aggfunc='sum')

    columns参数

    设置列层次字段, 对values字段进行分类

    # 获取所有队主客场的总得分
    df.pivot_table(index='主客场',values='得分', aggfunc='sum')
    # 查看主客场下的总得分的组成元素是谁
    df.pivot_table(index='主客场', values='得分', aggfunc='sum', columns='对手')
    # fill_value 将空值填充
    df.pivot_table(index='主客场', values='得分', aggfunc='sum', columns='对手',fill_value=0)

    交叉表 crosstab

  • 是一种用于计算分组的特殊透视图,对数据进行汇总
  • pd.crosstab(index,colums)
  • index:分组数据,交叉表的行索引
  • columns:交叉表的列索引
  • df = DataFrame({'sex':['man','man','women','women','man','women','man','women','women'],
                   'age':[15,23,25,17,35,57,24,31,22],
                   'smoke':[True,False,False,True,True,False,False,True,False],
                   'height':[168,179,181,166,173,178,188,190,160]})
    
    # 求出各个性别抽烟的人数
    pd.crosstab(index=df.smoke,columns=df.sex)
    # 求出各个年龄段抽烟人情况
    pd.crosstab(index=df.age, columns=df.smoke)