извлекать значения из фрейма данных, используя ключи в словаре - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь отфильтровать биржевые символы по их отрасли. Я не могу найти способ использовать созданный мной словарь для ввода всех символов тикера. Как я могу перебирать ключи в моем словаре, чтобы добавить символы акций в их соответствующий список? Я относительно новичок в 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']}

Я знаю, что вы можете вручную ввести в каждую отрасль данных фрейм данных, чтобы отфильтровать каждый список по отдельности, но, поскольку существуют тысячи строк данных, я ищу итерацию, подобную моей выше, просто рабочую.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Вам понадобятся две концепции, чтобы делать то, что вы хотите: 1) дефолтный Python 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 в конце, как я;нормальный dict и defaultdict будут работать одинаково, но нормальный dict выглядит немного лучше, если вы хотите распечатать на экране по любой причине.

Наконец, это действительно всестороннее обсуждение defaultdicts: Как работает collection.defaultdict?

0 голосов
/ 23 октября 2019

Подобный вопрос, скорее всего, задавался ранее, но я думаю, что это решение решит вашу проблему.

Заполните словарь каждой отраслью и имеющимися в ней символами:

industries = {}
for industry in df.industry.unique():
    industries[industry] = df.loc[df.industry == industry].Symbol.unique()

Цикл for выполняет итерацию по каждой уникальной отрасли в вашем DataFrame. Затем он использует эти отрасли в качестве ключей к словарю и присваивает массив каждому ключу, который содержит символы, назначенные для этой отрасли.

...