根据条件在熊猫中将一列从一个数据框映射到另一个

时间:2019-06-01 17:10:35

标签: python pandas mapping

我有两个数据框df_inv df_inv

和df_sales。 df_sales

我需要在df_inv中添加一栏,其中包含基于df_sales中标记的医生的销售人员姓名。我想这是一个简单的合并,如果df_sales中的销售人员与医生的关系是唯一的。但是销售人员之间医生的所有权有所变化,每次转移都会在更新的日期添加一行。 因此,如果发票日期小于更新日期,则应使用以前的标记;如果以前没有标记,则应显示nan。换句话说,对于df_inv中的每个invoice_date,应该使用df_sales中的先前最大update_date进行标记。

结果表应如下所示 Final Table

我对编程还比较陌生,但通常可以找到解决问题的方法。但是我无法弄清楚。感谢您的帮助

1 个答案:

答案 0 :(得分:0)

import pandas as pd
import numpy as np
df_inv = pd.read_excel(r'C:\Users\joy\Desktop\sales indexing\consolidated report.xlsx')
df_sales1 = pd.read_excel(r'C:\Users\joy\Desktop\sales indexing\Sales Person 
tagging.xlsx')
df_sales2 = df_sales1.sort_values('Updated Date',ascending=False)

df_sales = df_sales2.reset_index(drop=True)

sales_tag = []
sales_dup = []
counter = 0
for inv_dt, doc in zip(df_inv['Invoice_date'],df_inv['Doctor_Name']):

    for sal, ref, update in zip(df_sales['Sales 
    Person'],df_sales['RefDoctor'],df_sales['Updated Date']):

    if ref==doc:
        if update<=inv_dt and sal not in sales_dup :
            sales_tag.append(sal)
            sales_dup.append(ref)
            break
        else:
            pass

    else:
        pass
sales_dup = []
counter = counter+1
if len(sales_tag)<counter:
    sales_tag.append('none')
else:
    pass

df_inv['sales_person'] = sales_tag

这似乎起作用。