如何解决根据条件分配值
我有一个数据库,用于跟踪一家建筑公司的服务和安装收入。我正在尝试跟踪技术人员的流失情况,其中技术人员为销售人员和销售收入设定了线索。在此示例中,从数据库中提取的 Justin 是创建潜在客户的技术人员;肖恩是接电话的推销员,在这种情况下,他把它卖掉了;最后,维克多是安装这项工作的人。所有销售人员的总数为 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 发起的电话会议,促成了 1.72 万美元的销售,我想感谢 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.groupby
、pd.sort_values
和 pd.iloc
;但没有成功。我不太清楚如何为所需的行分配适当的值。如果有人知道解决方案或可以为我指明正确的方向,我们将不胜感激。
解决方法
如果你有这个数据框(假设记录已排序=安装工作在最后):
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。