Альтернатива Python для панд 'map' для функции 2 переменных - PullRequest
0 голосов
/ 04 декабря 2018

Я хотел бы поместить 2 таблицы в 1, а именно дату корпоративного объявления и ее цену в тот день (в другой таблице)

У меня есть 2 кадра данных со следующими столбцами

df1: date, announcement, ticker

date        ticker   announcement
25/4/2013   AAPL     Change in Boardroom
25/4/2013   GOOG     OTHERS
25/4/2013   AMZN     Change in Audit Committee

df2: date, ticker, price

date        ticker   announcement
22/3/2012   AAPL     100.00
23/3/2012   AAPL     102.30
24/3/2012   AAPL     105.40
...
...

def getPrice(dt,tk):
    try:
        return df2[(df2['date']>=dt)&(df2['ticker']==tk)].sort_values(by='date')['price'].values[0]
    except:
        return 0

prices_array = list(map(getPrice,df1['date'].values,df1['ticker'].values))

df1['price'] = prices_array

Для функции «карта» весь процесс занимает очень много времени.Я хотел бы использовать apply для df, но я знаю только, как использовать apply с лямбда-функцией, которая не содержит «if, then».

Я хочу дополнительный столбец, подобный этому:

date        ticker   announcement               price
25/4/2013   AAPL     Change in Boardroom        124.10
25/4/2013   GOOG     OTHERS                     50.85
25/4/2013   AMZN     Change in Audit Committee  102.20

Есть предложения о том, как быстро это сделать?Или можете сделать это за короткое время?

Спасибо и ценим вашу помощь

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Я думаю, вы можете использовать '.join'

df.set_index(['date', 'ticker']).join(df2.set_index(['date', 'ticker'])
0 голосов
/ 04 декабря 2018

Вы можете создать свою функцию для DataFrame.apply() с def вместо lambda.Определите его заранее, а затем поместите имя функции, куда должна идти лямбда, так же, как вы делали для map().

Применяемая функция получает аргумент Series, поэтому вы можете получить всю строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...