Заполнение столбца панд на основе 2 других столбцов - PullRequest
0 голосов
/ 21 декабря 2018

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

dict1 = [{'ticker': 'AAPL','date': date(2016, 3, 1),'Price': 'NaN'},
         {'ticker': 'MSFT','date': date(2017, 12, 1), 'Price': 'NaN'}]

 df1 = pd.DataFrame(dict1)
 df1.index=df1['ticker']
 df1.loc['AAPL','Price'] = web.DataReader(df1.loc['AAPL','ticker'], 'iex', df1.loc['AAPL','date'], df1.loc['AAPL','date']).close[0]

Я изо всех сил пытаюсь найти способ автоматизировать это с помощью цикла for, apply или map.Кто-нибудь может предложить подход?

Я задал похожий вопрос, где работал «map» (только для 1 столбца), но я не уверен, как расширить его до 2 ссылочных столбцов.

Заполнение столбца панд на основе другого столбца

Обратите внимание, что функция, используемая для получения имени, происходит отсюда:

import pandas_datareader.data as web

1 Ответ

0 голосов
/ 21 декабря 2018

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html

import pandas as pd
from datetime import date

import pandas_datareader.data as web


def lookup_price(row):
    return web.DataReader(row['ticker'], 'iex', row['date']).close[0]


def main():
    dict1 = [
        {'ticker': 'AAPL', 'date': date(2016, 3, 1)},
        {'ticker': 'MSFT', 'date': date(2017, 12, 1)},
    ]
    df1 = pd.DataFrame(dict1)
    df1['price'] = df1.apply(lookup_price, axis='columns')
    print(df1)


if __name__ == '__main__':
    main()
...