繁体   English   中英

使用列表值和 pandas dataframe 创建字典

[英]Create dictionary using list values and pandas dataframe

我有下面的 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

预期 output 带字典,

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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM