懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd

转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的)

经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死。后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器—— pandas

前言

Excel 中名声最响的就是 vlookup 函数,当然在 Excel 函数公式中用于查找的函数家族也挺大,不过在 pandas 中这功能却要简单多了。今天就来看看 pandas 中任何实现 Excel 中的多列批量 vlookup 的效果


案例1:简单匹配

一天,你收到一份数据源表如下:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 每个人每个城市的销售额数据

接着,你需要把下图的表格从数据源表匹配过来:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 根据名字与上方的城市名字,从表1中匹配数据

对于 Excel 来说,这需求很简单,一个 vlookup 即可解决:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 由于刚好目标表的城市顺序与源表顺序一样,因此可以这么解决

那么我们来看看 pandas 中怎么实现:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 行6、7,由于现在需要姓名匹配,我们把2份数据的姓名列设置为行索引
  • 行9,简单调用 update 方法,表示 df_tg 按照 df_src 更新值

由于 pandas 的数据表(DataFrame) 有行列索引,并且总是行列索引对齐,因此匹配数据是轻而易举的事情。

注意:本文所有的 pandas 更新方法,都是索引更新,而非遍历更新,因此速度非常快。别用 vlookup 的速度与其相比


懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

案例2:有缺失

有时候,目标表不是这么"好说话":

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 这次的城市列只有2列

那么,用 Excel 的 vlookup 就要配合 match 函数进行动态定位:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

不多讲解 Excel 的做法了,因为随着需求难度逐渐提升,公式会越来越"丑"


同样看看 pandas 的做法:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

你可能会觉得是我贴错了代码,这不就是案例1的代码吗?

你没看错,这代码只是读取的表名不一样而已。其他代码一样。很简单吧。


懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

案例3:不存在的列

你可能会疑问:如果目标表本身就有一些数据源不存在的列,那么更新还能顺利吗:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 目标表多了一列数据,我们当然希望更新不会影响到这一列

继续看 pandas 的代码:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 是的,他很智能,只会更新列名配对的那些列

案例4:多列匹配

上面的案例只是根据名字来匹配,如果需要根据多个列匹配呢?

如下一份数据源:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 颗粒为,每人每个城市的指标值

目标表如下:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 根据 姓名 与 城市 ,匹配出指标

你可能会以为这次我总要用点啥技巧了吧。pandas 没有那么多花俏的东西,还是那段代码:

懂Excel轻松入门Python数据分析pandas(18):pandas 中的vlookup

  • 行6和7,设置 姓名 与 城市 作为行索引即可,其他代码不变

这里的案例只是行索引为多层索引,实际上即使是列标题为多层复合,也能用同样的方式匹配。

多层索引及其应用,以及更多关于数据更新的高级应用,请关注我的 pandas 专栏:


总结

本文重点:

  • DataFrame.update 是更新值的好工具
  • 构造好行列索引,是关键

需要源码的小伙伴请转发本文并私信我"python"

如果希望从零开始学习 pandas ,那么可以看看我的 pandas 专栏。


分享到:


相關文章: