我想检查字符串是否包含两个词典中的一个或多个值。
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"
。
答案 0 :(得分:1)
为什么不首先分解这些数据,如下所示:
this.props.bossData.head.map(function(item) {
return <a onClick={this.props.handleClick.bind....} //You fill in the rest
}, this);
现在,使用这些字符串要容易得多。鉴于这是您的词典示例:
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
您可以利用“dictonary views”,其行为类似于Python中的集合:
company = {"AXP": "American Express", "BIDU": "Baidu"}
stock_index = {"GOOG": "Google"}
现在,我们有一个类似集合的对象,我们可以使用它来过滤数据并设置“Equity”:
# 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'}
如果您担心不加入这样的词典,您可能需要考虑使用类似ChainMap的内容:https://docs.python.org/3/library/collections.html#collections.ChainMap 那是Python 3标准库,但是应该存在向Python 2的反向移植。