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
    
  • 相关阅读:
    npmcnpmyarn yarn 关于源和代理的问题
    react : umi 引入 antd 踩坑
    Ant Design Pro 学习笔记:数据流向
    dva + umi 学习笔记
    简单分析 ztree 源码
    X-Tag实战:给博客加一个隐藏侧栏的功能
    javascript中var,let,const的区别
    linq 延迟执行带来的困扰
    如何实现能像windows 窗体一样改变大小的控件 Silverlight
    一个循环递归遍历问题
  • 原文地址:https://www.cnblogs.com/ivan09/p/15782785.html
Copyright © 2011-2022 走看看