python - 使用列表值和 pandas 数据框创建字典
问题描述
我有下面的 FullCompanyName 列表,
List_FullCompanyName = ['谷歌','微软','埃森哲']
输入数据在 Dataframe 中,如下所述
公司名称代码 | 借记金额 | 全公司名 | 信用额度 |
---|---|---|---|
xyzGoog | 100 | zm | |
abc微软 | 200 | zx | |
xcdAccentu | 300 | qt | |
工作123 | 谷歌 | 52 | |
下一个45 | 微软 | 500 | |
并行54 | 埃森哲 | 95 |
根据 'FullCompanyName' 的字符串值,在 'CompanyNamecode' 列中找到部分字符串匹配,并对对应的部分字符串匹配记录应用公式,金额 = CreditAmount - DebitAmount。
如果 FullCompanyName 名称少于 3 个字符,则忽略(例如 zm、zx、qt)进行字符串匹配,并且如果 CompanyNamecode 不包含部分字符串(例如 next45、parlell54),则忽略具有 CompanyNamecode 的记录。示例:'FullCompanyName' = 'Google' 在 'CompanyNamecode' = 'Goog' 中查找部分字符串匹配。要与 CompanyNamecode 列值匹配,请使用 rstrip() 并应用公式 Amount = 52-100
字典的预期输出,
Amount_Dict = { FullCompanyName:Amount},
Amount_Dict = {“谷歌”:-48,“微软”:300,“埃森哲”:-205}
解决方案
import numpy as np
import pandas as pd
from difflib import SequenceMatcher
df = pd.DataFrame(columns=['CompanyNamecode', 'DebitAmount', 'FullCompanyName', 'CreditAmount'],
data=[['xyzGoog', 100, pd.NA, pd.NA],
['abcMicrosof', 200, pd.NA, pd.NA],
['xcdAccentu', 300, pd.NA, pd.NA],
[pd.NA, pd.NA, 'Google', 52],
[pd.NA, pd.NA, 'Microsoft', 500],
[pd.NA, pd.NA, 'Accenture', 95]
]
)
code = df['CompanyNamecode'].dropna()
fullname = df['FullCompanyName'].dropna()
d = {}
for ix, fn in fullname.iteritems():
matches = [SequenceMatcher(a=fn, b=cd).find_longest_match(0, len(fn), 0, len(cd)).size for cd in code]
best_match = np.argmax(matches)
d[fn] = df['CreditAmount'][ix] - df['DebitAmount'][best_match]
code.drop(best_match)
print(d) # --> {'Google': -48, 'Microsoft': 300, 'Accenture': -205}
推荐阅读
- wpf - WPF中的单选按钮导航问题?
- hystrix - Hystrix 后备实施是强制性的吗?
- java - 日光节约的 JDBC Mysql 时区问题
- c# - 我可以在并行线程中更新一个实体 c#
- r - Rmarkdown,打印数据框
- python-3.x - 尝试在 Python 3 上执行正弦规则时出现数学域错误
- reactjs - 如何在函数调用的反应挂钩中更改样式属性
- java - 没有为 SQL 参数“orgName”提供值:此 SqlParameterSource 为空
- javascript - 每 5 秒更换一次背景图片
- python - 当我尝试在 Mac OSX 上使用 pip 时,Python 不工作(ImportError)