本站消息

站长简介/公众号


站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群.欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Excel like vlookup 在某些条件下使用 python pandas

发布于2022-01-18 09:37     阅读(516)     评论(0)     点赞(10)     收藏(0)



我需要在某些条件下使用 python/pandas 对数据框执行 vlookup,就像在 Excel 中一样。

状况:-

  1. 我需要使用 Excel 之类的 vlookup 在我的第二个 DataFrame 中创建一个新列 (DFM)。

  2. 如果 DFM 值为 na,则在第二个 Dataframe 的 DFM 中打印 100%。就像下面的结果数据一样。

  3. 在结果数据 DFM 列中,我只需要对前 10 行应用 vlookup。然后从第 11 行开始,我想一次又一次地复制前 10 行数据,但每次都删除第一行之后。请看下面的结果示例。因为我们将在每次迭代中删除第一行,所以最后一行是空的,所以我们需要在条件 2 中打印 100%。

第一个数据框:-

  S.No     Cal     Date             DFM
  1            8       01-03-2013   100.00%
  1            7       01-06-2013   100.00%
  1            6       01-09-2013   100.00%
  1            5       01-12-2013   99.99%
  1            4       01-03-2014   99.97%
  1            3       01-06-2014   99.95%
  1            2       01-09-2014   98.89%
  1            1      01-12-2014   39.36%
  1            0      01-03-2015   0.00%
  1            0      01-06-2015   0.00%
  1            0      01-09-2015   0.00%
  1            0      01-12-2015   0.00%
  1            8      01-03-2013   100.00%
  1            7      01-06-2013   100.00%
  1            6      01-09-2013   100.00%
  1            5      01-12-2013   99.99%
  1            4      01-03-2014   99.97%
  1            3      01-06-2014   99.95%
  1            2      01-09-2014   98.89%
  1            1      01-12-2014   39.36%
  1            0      01-03-2015   0.00%
  1            0      01-06-2015   0.00%
  1            0      01-09-2015   0.00%
  1            0      01-12-2015   0.00%
  1            8      01-03-2013   100.00%
  1            7      01-06-2013   100.00%
  1            6      01-09-2013   100.00%
  1            5      01-12-2013   99.99%
  1            4      01-03-2014   99.97%
  1            3      01-06-2014   99.95%
  1            2      01-09-2014   98.89%
  1            1      01-12-2014   39.36%
  1            0      01-03-2015   0.00%
  1            0      01-06-2015   0.00%
  1            0      01-09-2015   0.00%
  1            0      01-12-2015   0.00%
  

第二个数据框:-

      Cal     Group        
        1     period 1    
        2     period 1    
        3     period 1    
        4     period 1   
        5     period 1    
        6     period 1    
        7     period 1    
        8     period 1    
        9     period 1    
       10    period 1         
        1     period 1    
        2     period 1    
        3     period 1    
        4     period 1   
        5     period 1    
        6     period 1    
        7     period 1    
        8     period 1    
        9     period 1    
       10    period 1        
        1     period 1    
        2     period 1    
        3     period 1    
        4     period 1   
        5     period 1    
        6     period 1    
        7     period 1    
        8     period 1    
        9     period 1    
       10    period 1    

结果:-

        Cal     Group       DFM
         1     period 1    39.36%
         2     period 1    98.89
         3     period 1    99.95%
         4     period 1    99.97%
         5     period 1    99.99%
         6     period 1    100.00%
         7     period 1    100.00%
         8     period 1    100.00%
         9     period 1    100.00%
        10    period 1    100.00%
         1      period 1    98.89
         2     period 1    99.95%
         3     period 1    99.97%
         4     period 1    99.99%
         5     period 1    100.00%
         6     period 1    100.00%
         7     period 1    100.00%
         8     period 1    100.00%
         9     period 1    100.00%
        10    period 1    100.00%
         1     period 1    99.95%
         2     period 1    99.97%
         3     period 1    99.99%
         4     period 1    100.00%
         5     period 1    100.00%
         6     period 1    100.00%
         7     period 1    100.00%
         8    period 1    100.00%
         9    period 1    100.00%
        10    period 1    100.00%
     

解决方案


在许多编程语言中,vlookups 的等价物是SQL 连接的一些实现。在熊猫中,要么df.merge()用于列,要么df.join()用于索引。

为了创建移位效果,我连接了每个移位片段的列表。

import pandas as pd

df1 = pd.read_csv("temp/df1.csv").drop_duplicates()
df2 = pd.read_csv("temp/df2.csv").drop_duplicates()

vlookuped = (df2.merge(df1, how="left", on=["Cal"])
             .drop(columns=["S.No", "Date"]))

result = (
    pd.concat([
        vlookuped,
        vlookuped.assign(DFM=lambda x: x["DFM"].shift(-1)),
        vlookuped.assign(DFM=lambda x: x["DFM"].shift(-2))],
        ignore_index=True)
    .fillna("100.00%"))

此代码生成以下数据框:

Cal    Group     DFM
  1 period 1  39.36%
  2 period 1  98.89%
  3 period 1  99.95%
  4 period 1  99.97%
  5 period 1  99.99%
  6 period 1 100.00%
  7 period 1 100.00%
  8 period 1 100.00%
  9 period 1 100.00%
 10 period 1 100.00%
  1 period 1  98.89%
  2 period 1  99.95%
  3 period 1  99.97%
  4 period 1  99.99%
  5 period 1 100.00%
  6 period 1 100.00%
  7 period 1 100.00%
  8 period 1 100.00%
  9 period 1 100.00%
 10 period 1 100.00%
  1 period 1  99.95%
  2 period 1  99.97%
  3 period 1  99.99%
  4 period 1 100.00%
  5 period 1 100.00%
  6 period 1 100.00%
  7 period 1 100.00%
  8 period 1 100.00%
  9 period 1 100.00%
 10 period 1 100.00%

站长简介:高级工程师,爱好交友,无偿辅导python和前端,技术交流,面试指导,找工作指导,瞎聊都可加我微信i88811i哈,欢迎欢迎!也欢迎加入程序员交流群,专属程序员的圈子,加我微信拉你进群
欢迎关注我的公众号:程序员总部,关注公众号回复python,免费领取 全套python视频教程,关注公众号回复充值+你的账号,免费为您充值1000积分







所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1256396/84656dc4ffd6b5e3b8d7/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

10 0
收藏该文
已收藏

评论内容:(最多支持255个字符)