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

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

    前言

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

    案例1:简单匹配

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

    (十八):pandas 中的 vlookup - 图1

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

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

    (十八):pandas 中的 vlookup - 图2

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

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

    (十八):pandas 中的 vlookup - 图3

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

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

    (十八):pandas 中的 vlookup - 图4

    • 行6、7,由于现在需要姓名匹配,我们把2份数据的姓名列设置为行索引

    • 行9,简单调用 update 方法,表示 df_tg 按照 df_src 更新值

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

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

    案例2:有缺失

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

    (十八):pandas 中的 vlookup - 图5

      • 这次的城市列只有2列

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

    (十八):pandas 中的 vlookup - 图6

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

    同样看看 pandas 的做法:

    (十八):pandas 中的 vlookup - 图7

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

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

    案例3:不存在的列

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

    (十八):pandas 中的 vlookup - 图8

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

    继续看 pandas 的代码:

    (十八):pandas 中的 vlookup - 图9

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

    案例4:多列匹配

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

    如下一份数据源:

    (十八):pandas 中的 vlookup - 图10

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

    目标表如下:

    (十八):pandas 中的 vlookup - 图11

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

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

    (十八):pandas 中的 vlookup - 图12

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

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

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

    总结

    本文重点:

    • DataFrame.update 是更新值的好工具

    • 构造好行列索引,是关键

    需要源码的小伙伴,公众号发送”数据处理”

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

    扫描二维码

    获取更多精彩

    数据大宇宙

    (十八):pandas 中的 vlookup - 图13