gpt4 book ai didi

Python str.contains 来自两个或多个字典

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:26 26 4
gpt4 key购买 nike

我想检查一个字符串是否包含两个字典中的一个或多个值。

company = {"AXP": "American Express", "BIDU": "Baidu"}
stock_index = {"GOOG": "Google"}

for c, i in zip(company, stock_index):
df.loc[df.name.str.contains(c, i), "instrumentclass"] = "Equity"

由于某种原因,它只为字典中的第一个匹配项写入 "Equity",即 "AXP":"American Express"。对于“Baidu”“Google”,没有任何反应。

我知道我可以将这些词典合并为一个,如下所示,但我不想这样做。

benchmarks = company.copy()
benchmarks.update(stock_index)
<小时/>

pandas DataFrame的帮助下写入和检索数据。

import pandas as pd
df = pd.DataFrame(["LONG AXP", "SHORT AXP", "LONG BIDU", "LONG GOOG"], columns=["name"])

代码将name列复制到instrumentclass列,通过这样做,应该将每个单元格替换为“Equity”(如果它包含) “AXP”“BIDU”“GOOG”

最佳答案

为什么不首先分解这些数据,如下所示:

df = pd.DataFrame(["LONG AXP", "SHORT AXP", "LONG BIDU", "LONG GOOG"],
columns=["name"])

# split on spaces and get the last part
df["company_name"] = df.name.str.split().str.get(-1)

>>> print df
name company_name
0 LONG AXP AXP
1 SHORT AXP AXP
2 LONG BIDU BIDU
3 LONG GOOG GOOG

现在,使用这些字符串变得更加容易。鉴于这是您的词典示例:

company = {"AXP": "American Express", "BIDU": "Baidu"}
stock_index = {"GOOG": "Google"}

您可以利用“字典 View ”,其行为类似于 Python 中的集合:

# this is Python 2, if you use Python 3, .keys() method returns a view
all_companies = company.viewkeys() | stock_index.viewkeys()

>>> print all_companies
{'AXP', 'BIDU', 'GOOG'}

现在,我们有一个类似集合的对象,可以用来过滤数据并设置“Equity”:

df.loc[df.company_name.isin(all_companies), "instrumentclass"] = "Equity"

如果您担心不能像这样加入这些字典,您可能需要考虑使用诸如 ChainMap 之类的东西:https://docs.python.org/3/library/collections.html#collections.ChainMap 这是 Python 3 标准库,但向后移植到 Python 2 应该存在。

关于Python str.contains 来自两个或多个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com