使用列表值和 pandas 数据框创建字典
Posted
技术标签:
【中文标题】使用列表值和 pandas 数据框创建字典【英文标题】:Create dictionary using list values and pandas dataframe 【发布时间】:2021-04-21 14:13:23 【问题描述】:我有下面的 FullCompanyName 列表,
List_FullCompanyName = ['Google','Microsoft','Accenture']
输入数据在 Dataframe 中,如下所述
CompanyNamecode | DebitAmount | FullCompanyName | CreditAmount |
---|---|---|---|
xyzGoog | 100 | zm | |
abcMicrosof | 200 | zx | |
xcdAccentu | 300 | qt | |
working123 | 52 | ||
next45 | Microsoft | 500 | |
parlell54 | Accenture | 95 |
根据 'FullCompanyName' 的字符串值在 'CompanyNamecode' 列中找到部分字符串匹配,并对对应的部分字符串匹配记录应用公式,金额 = CreditAmount - DebitAmount。
如果 FullCompanyName 名称少于 3 个字符,则忽略(例如 zm、zx、qt)进行字符串匹配,并且如果带有 CompanyNamecode 的记录不包含部分字符串(例如 next45、parlell54),则忽略该记录。 例子: 'FullCompanyName' = 'Google' 在 'CompanyNamecode' = 'Goog' 中找到部分字符串匹配。要与 CompanyNamecode 列值匹配,请使用 rstrip() 并应用公式 Amount = 52-100
字典的预期输出,
Amount_Dict = FullCompanyName:Amount,
Amount_Dict = 'Google': -48, 'Microsoft': 300, 'Accenture':-205
【问题讨论】:
【参考方案1】: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
【讨论】:
我还有一些疑问,能不能过来聊聊@Lior Cohen 请详细说明您的疑问 在问题陈述@Lior Cohen 中添加了更多详细信息 这是一个自定义问题。所以一开始没有给出细节,以免混淆问题。 有人可以向我解释拒绝投票的原因吗?它有助于我下次发布适当的信息以上是关于使用列表值和 pandas 数据框创建字典的主要内容,如果未能解决你的问题,请参考以下文章
如何从Twitter Search API创建pandas数据框?