我有两个数据框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
我对编程还比较陌生,但通常可以找到解决问题的方法。但是我无法弄清楚。感谢您的帮助
答案 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
这似乎起作用。