zoukankan      html  css  js  c++  java
  • 记录一次 panads中apply函数 与lambda 匿名函数

    背景

    这边想要计算 df2中各个销售人员的销售额,而销售额来自于 df1中,有点类似于 excel中的sumifs。
    1.一般思路是对两张表进行merge,然后进行groupby,但是比较麻烦。
    2. 对于df2销售人员的销售额来说无非是 取相同地区 及人员的 销售额 然后进行聚合即可。涉及到筛选,以及聚合操作

    import panads as pd
    df1 = pd.DataFrame({'销售人员':['张三','李四','张三','张三','王五','李四'],'地区':['湖北','北京','上海','湖北','北京','北京'],'销售额':[100,200,100,300,100,2000]})
    df2 = pd.DataFrame({'销售人员':['张三','kaisi','王五','李四','iii'],'地区':['湖北','上海','上海','北京','广东']})
    
    # 以下apply应用主体是 df2[['销售人员','地区']] 并且设定其中一个参数axis=1 是按行来进行操作,所以每次匿名函数lambda中 x 代表 df2[['销售人员','地区']][0,:]
    df2['销售额'] = df2[['销售人员','地区']].apply(lambda x : df1.loc[(df1.销售人员== x['销售人员'])&(df1.地区==x['地区']),'销售额'].sum(),axis=1)
    
    #以下等同上述 代码段。
    df2['销售额'] = df2[['销售人员','地区']].apply(lambda x : df1['销售额'].loc[(df1.销售人员== x['销售人员'])&(df1.地区==x['地区'])].sum(),axis=1)
    
    
    #打印x看一下输出: 如果 没有axis=1 ,会默认axis=0,按列进行操作,x 取值分别为:df2['销售人员']、df2['地区'],这样就会导致无法对多条件进行判断 ,
    #因为 当 x为  df2['销售人员']的时候,df1.地区==x['地区']会报keyerror ‘地区’,因为此时没有地区这一列,coding的时候 一直耽误了较多时间,在此记录下来。
    销售人员    张三
    地区      湖北
    Name: 0, dtype: object
    销售人员    kaisi
    地区         上海
    Name: 1, dtype: object
    销售人员    王五
    地区      上海
    Name: 2, dtype: object
    销售人员    李四
    地区      北京
    Name: 3, dtype: object
    销售人员    iii
    地区       广东
    Name: 4, dtype: object
    
  • 相关阅读:
    BZOJ1841 : 蚂蚁搬家
    BZOJ3068 : 小白树
    BZOJ4449 : [Neerc2015]Distance on Triangulation
    BZOJ3692 : 愚蠢的算法
    BZOJ3145 : [Feyat cup 1.5]Str
    BZOJ4684 : Company Organization
    BZOJ2934 : [Poi1999]祭坛问题
    ML(2)——感知器
    ML(附录1)——梯度下降
    微服务架构
  • 原文地址:https://www.cnblogs.com/ivan09/p/15782785.html
Copyright © 2011-2022 走看看