python - 找到最小营业额账户
问题描述
我的客户在 Excel 中有许多不同的经纪账户。对于每个帐户,它都有一个帐户名称、帐户类型、股票名称和每个股票的分配。每个帐户中的股票数量各不相同。该文件如下所示:
Account Name Account Type Stock Name Stock Allocation
MN001 #1 ABC 40%
MN001 #1 ABD 60%
MN002 #2 ABC 50%
MN002 #2 ABD 40%
MN002 #2 EFG 10%
MN003 #3 ABC 20%
MN003 #3 ABD 40%
MN003 #3 EFG 40%
MN004 #4 ABC 30%
MN004 #4 ABD 70%
我们希望从账户类型 #1 (MN001) 移动到其他账户类型(MN002、MN003 或 MN004)。标准是找到最小营业额的账户。例如,MN001 和 MN002 之间的营业额是 ABC(0.1) + ABD(0.2) + EFG(0.1) = 0.4。MN001 和 MN003 之间的营业额是 ABC (0.2) + ABD(0.2) + EFG(0.4) = 0.8。MN001 和 MN004 之间的营业额是 ABC (0.1) + ABD(0.1)= 0.2。MN004 的营业额最低。
因此,所需的输出:
From Account/Account Type To Account/Account Type Minimum TurnOver
MN001 #1 MN004 #4 0.2
MN002 #2 MN001 #1 0.4
在 Excel 中似乎很难做到这一点。可以用 Python 完成吗?非常感谢您的帮助!
解决方案
是的,它可以在 Python 中完成,它可能看起来像这样。
accounts = [{'ABC':0.4, 'ABD':0.6}, {'ABC':0.5, 'ABD':0.4, 'EFG':0.1}]
这是您的帐户,MN001 是accounts[0]
,MN002 是accounts[1]
等等..
def compute_turnover(first_account, second_account):
turnover = 0
for stock_name, stock_allocation in first_account.items():
other_allocation = second_account.get(stock_name)
if other_allocation is not None:
turnover += abs(stock_allocation - second_account[stock_name])
else:
turnover += stock_allocation
for stock_name, stock_allocation in second_account.items():
other_allocation = first_account.get(stock_name)
if other_allocation is None:
turnover += stock_allocation
return turnover
如上定义一个 compute_turnover 函数,你用 MN001 和 MN002 调用它,你会得到预期的结果
>>> compute_turnover(accounts[0], accounts[1])
0.4
现在让我们假设您有一个list1
需要转移的帐户和一个list2
目标帐户。你可以只需要转换python字典中的两个列表,然后迭代如下
list1 = [{'ABC':0.4, 'ABD':0.6}, {'ABC':0.5, 'ABD':0.4, 'EFG':0.1}]
list2 = [{'ABC':0.4, 'ABD':0.6}, {'ABC':0.5, 'ABD':0.4, 'EFG':0.1}]
turnover_accounts = []
for account in list1:
min_turnover = 1e9
turnover_account = None
for target_account in list2:
if compute_turnover(account, target_account) < min_turnover:
min_turnover = compute_turnover(account, target_account)
turnover_account = target_account
turnover_accounts.append(turnover_account)
您的turnover_accounts
列表将包含最低营业额的目标账户索引。
推荐阅读
- r - 如何将向量中的其余变量设置为零而不单独定义每个变量
- mapbox - 单个 Mapbox Vector Tile 的预期大小(以像素为单位)是多少?
- google-chrome - 赛普拉斯无法在无头 Chrome 中打开弹出窗口
- php - PHP PDO 未从 MSSQL 存储过程调用中找到 OUTPUT 参数
- php - 刷新页面后无法停止页面浏览量的增加
- laravel - 在 Laravel Blade 中访问 JSON 数组
- tableau-api - 应用过滤器的总变化百分比
- java - 为什么 -classpath 找不到我的 Jsoup jar 文件?
- python - conf.py 中的 setup(app) 有什么用?
- php - 使用 PHP (WordPress) 将文件上传到本地主机中的共享文件夹/映射驱动器