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

2021-09-01 14:40:52 浏览数 (1)

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

前言

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

案例1:简单匹配

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

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

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

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

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

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

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

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

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

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

案例2:有缺失

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

  • - 这次的城市列只有2列

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

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

同样看看 pandas 的做法:

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

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

案例3:不存在的列

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

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

继续看 pandas 的代码:

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

案例4:多列匹配

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

如下一份数据源:

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

目标表如下:

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

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

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

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

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

总结

0 人点赞