【问题标题】:Assigning Values Depending on a Condition根据条件分配值
【发布时间】:2021-04-05 20:59:47
【问题描述】:

我有一个数据库,用于跟踪建筑公司的服务和安装收入。我正在尝试跟踪技术人员的流动率,其中技术人员为销售人员和销售收入设定了领先地位。在此示例中,从数据库中提取,贾斯汀是创建潜在客户的技术人员;肖恩是接电话的推销员,在这种情况下,他卖掉了它;最后,Victor 是安装这项工作的人。所有推销员的总数为 0,因为公司在安装完成之前不会收款。如果project_id == 0 则意味着没有从原始呼叫创建潜在客户。一个项目编号可以跨越至少 2 行,最多 3 行。

例子:

         project_id    emp_name     client_name     ...    invoice_date    total
...         ...          ...            ...         ...        ...          ...
15315     26173042      Justin         Bill W       ...     2021-03-26     169.95
...         ...          ...            ...         ...        ...          ...
15322     26173042      Sean           Bill W       ...     2021-03-27       0
...         ...          ...            ...         ...        ...          ...
15347     26173042      Victor         Bill W       ...     2021-04-01     17235
15348        0          Justin         Jane D       ...     2021-04-01      285
...         ...          ...            ...         ...        ...          ...

我想感谢贾斯汀(Justin)设置了导致销售 17200 美元的电话,我想感谢肖恩(Sean)出售这份工作。我希望创建一个名为 sales_total 的新列,用于记录销售数据。

想要的输出:

         project_id    emp_name     client_name     ...    invoice_date    total    sales_total
...         ...          ...            ...         ...        ...          ...         ...
15315     26173042      Justin         Bill W       ...     2021-03-26     169.95      17235
...         ...          ...            ...         ...        ...          ...         ...
15322     26173042      Sean           Bill W       ...     2021-03-27       0         17235
...         ...          ...            ...         ...        ...          ...         ...
15347     26173042      Victor         Bill W       ...     2021-04-01     17235       17235
15348        0          Justin         Jane D       ...     2021-04-01      285          0
...         ...          ...            ...         ...        ...          ...         ... 

我尝试过使用pd.groupbypd.sort_valuespd.iloc;但没有成功。我不太清楚如何为所需的行分配正确的值。如果有人知道解决方案或可以指出正确的方向,将不胜感激。

【问题讨论】:

  • 对于单个 project_id,您想将 sum of the total 分配给所有行吗?
  • @AmitVikramSingh 我想为具有相同 project_id 的行应用总数的最大值。除了 project_id == 0 的时候,因为 project_id 为 0 的行很多。

标签: python python-3.x pandas dataframe


【解决方案1】:

如果您有此数据框(假设记录已排序 = 安装作业是最后一个):

   index  project_id emp_name client_name invoice_date     total
0  15315    26173042   Justin      Bill_W   2021-03-26    169.95
1  15322    26173042     Sean      Bill_W   2021-03-27      0.00
2  15347    26173042   Victor      Bill_W   2021-04-01  17235.00
3  15348           0   Justin      Jane_D   2021-04-01    285.00

然后:

df["sales_total"] = df.groupby("project_id")["total"].transform("last")
print(df)

创建sales_total 列:

   index  project_id emp_name client_name invoice_date     total  sales_total
0  15315    26173042   Justin      Bill_W   2021-03-26    169.95      17235.0
1  15322    26173042     Sean      Bill_W   2021-03-27      0.00      17235.0
2  15347    26173042   Victor      Bill_W   2021-04-01  17235.00      17235.0
3  15348           0   Justin      Jane_D   2021-04-01    285.00        285.0

【讨论】:

    猜你喜欢
    • 2018-04-30
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2018-07-10
    • 2015-11-19
    相关资源
    最近更新 更多