我正在尝试按其行业过滤股票行情代码。我找不到使用创建的词典引入所有股票代号的方法。如何遍历字典中的键以将股票代号引入各自的列表中?我是python的新手,我相信有一种相对简单的方法,我只是找不到它。
我的数据框如下:
Symbol industry
TXG Biotechnology
YI Medical
PIH Property Insurers
PIHPP Property Insurers
除了还有成千上万的行。
# I'm bringing in the values from the column 'industry' and create a dictionary:
industries_var = all_tickers['industry'].values
industries = {industry_name: [] for industry_name in industries_var}
# now I want to iterate through the name of every list in my dictionary
# and append the matching symbol to the industry name in the dataframe:
for key in industries:
if all_tickers['industry'].str.contains(key, na=False).any():
industries.append(all_tickers['Symbol'].values)
我收到错误代码:AttributeError:'dict'对象没有属性'append'
我希望字典看起来像这样:
industries = {Biotechnology: ['TXG']
Medical: ['YI']
Property Insurers: ['PIH', 'PIHPP']}
我知道您可以在数据框中手动键入每个行业以分别过滤每个列表,但是由于有成千上万的数据行,因此我在上面寻找像我这样的迭代,所以只是一个有效的迭代。
谢谢!
答案 0 :(得分:0)
以前很可能会问过类似的问题,但是我相信这种解决方案可以解决您的问题。
使用每个行业及其内的符号填充字典:
industries = {}
for industry in df.industry.unique():
industries[industry] = df.loc[df.industry == industry].Symbol.unique()
for循环遍历DataFrame中的每个独特行业。然后,它将这些行业用作字典的键,并为每个键分配一个数组,其中包含分配给该行业的符号。
答案 1 :(得分:0)
您需要两个概念来完成所需的工作:1)Python defaultdict 2)Pandas / numpy条件布尔掩码。这是使用您的DataFrame的有效示例:
import pandas as pd
from collections import defaultdict
all_tickers = pd.DataFrame({'Symbol': ['TXG', 'YI', 'PIH', 'PIHPP'], 'industry': ['Biotechnology', 'Medical', 'Property Insurers', 'Property Insurers']})
industries_var = set(all_tickers['industry'].values)
industries = defaultdict(list)
for k in industries_var:
industries[k].append(all_tickers[all_tickers.industry == k]['Symbol'].unique())
industries = dict(industries)
请注意,您不需要最后需要像我一样转换回普通字典;普通dict和defaultdict可以相同地操作,但是如果您出于任何原因要打印到屏幕上,普通dict看起来会更好一些。
最后,这是关于defaultdict的真正全面的讨论: How does collections.defaultdict work?