【问题标题】:Mapping a column from one dataframe to another in pandas based on condition根据条件将一列从一个数据帧映射到另一个数据帧
【发布时间】:2019-10-17 21:54:53
【问题描述】:

我有两个数据框 df_inv df_inv

和 df_sales。 df_sales

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

结果表应该是这样的 Final Table

我对编程比较陌生,但我通常可以找到解决问题的方法。但我无法弄清楚这一点。任何帮助表示赞赏

【问题讨论】:

标签: python pandas mapping


【解决方案1】:
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

这似乎有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2022-01-24
    • 2022-01-20
    • 2023-03-15
    • 1970-01-01
    • 2017-04-20
    • 2022-01-24
    相关资源
    最近更新 更多