pandas 使用apply将函数调用的结果组合到 Dataframe 中

l7wslrjt  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(118)

我尝试使用.apply创建一个dataframe,其中包含以下函数的串联结果,该函数只是提取选项数据并将其放入表格形式

import pandas as pd
import yfinance as yf

def get_opt_data(ticker, expiration):
    try:
        data = yf.Ticker(ticker)
        calls = data.option_chain(expiration).calls
        calls['Type'] = 'CALL'
        puts = data.option_chain(expiration).puts
        puts['Type'] = 'PUT'
        combined = pd.concat([calls,puts])
        combined['Ticker'] = ticker
        info = data.info
        combined['Sector'] = info['sector']
        combined['Industry'] = info['industry']
        return combined
    except:
        pass

当我尝试使用以下命令提取数据时:

ticker_list = pd.Series(['AAPL','GOOGL','MSFT','NVDA'])
option_data = ticker_list.apply(lambda x: get_opt_data(x, '2023-07-21'))

我得到一个包含结果 Dataframe 的系列,而不是连接 Dataframe 以创建单个 Dataframe 。
我在过去做过类似的事情,包括grouby和工作,我想我不明白为什么grouby是必要的工作。下面是前面正确组合结果的代码。

grouped_data = raw_data.groupby('Ticker', group_keys=False).apply(lambda x: get_indicators(x))
eit6fx6z

eit6fx6z1#

这是一个简单的问题。Apply以1:1的方式转换事物-也就是说,您将获得与发送相同数量的盒子。你可能想在每个元素上调用get_opt_data,并concat结果:

option_data = pd.concat(get_opt_data(x, '2023-07-21') for x in ticker_list)
print(option_data[:5].to_string())

产量

contractSymbol             lastTradeDate  strike  lastPrice     bid     ask     change  percentChange  volume  openInterest  impliedVolatility  inTheMoney contractSize currency  Type Ticker      Sector              Industry
0  AAPL230721C00050000 2023-06-13 19:24:32+00:00    50.0     133.50  134.40  137.35   0.000000       0.000000     1.0          21.0           2.383793        True      REGULAR      USD  CALL   AAPL  Technology  Consumer Electronics
1  AAPL230721C00055000 2023-06-16 13:36:40+00:00    55.0     131.17  129.40  132.35  37.170000      39.542550     2.0          23.0           2.218754        True      REGULAR      USD  CALL   AAPL  Technology  Consumer Electronics
2  AAPL230721C00060000 2023-06-16 13:36:40+00:00    60.0     126.22  123.20  127.40   1.220001       0.976001     2.0        2540.0           1.773439        True      REGULAR      USD  CALL   AAPL  Technology  Consumer Electronics
3  AAPL230721C00065000 2023-06-15 17:56:08+00:00    65.0     121.00  119.45  122.45   0.000000       0.000000     2.0         403.0           1.959473        True      REGULAR      USD  CALL   AAPL  Technology  Consumer Electronics
4  AAPL230721C00070000 2023-05-04 14:07:49+00:00    70.0      95.90  110.20  112.10   0.000000       0.000000     4.0         214.0           0.000010        True      REGULAR      USD  CALL   AAPL  Technology  Consumer Electronics

相关问题