gpt4 book ai didi

python - 对两个 Pandas DataFrame 进行矢量化操作以创建一个新的 DataFrame

转载 作者:行者123 更新时间:2023-12-01 02:31:15 25 4
gpt4 key购买 nike

我有orders.csv作为名为 orders_df 的数据框:

           Symbol Order  Shares
Date
2011-01-10 AAPL BUY 100
2011-01-13 AAPL SELL 200
2011-01-13 IBM BUY 100
2011-01-26 GOOG SELL 200

我最终用 orders_df = orders_df.sort_index() 对数据框进行排序。

然后我创建一个 symbols像这样:

symbols = np.append(orders_df.loc[:, 'Symbol'].unique(), 'SPY')

这是我的第二个 DataFrame df_prices .

df_prices = get_data(symbols, orders_df.index, addSPY=False)
df_prices.loc[:, 'CASH] = 1.0

打印出:

            AAPL IBM  GOOG XOM  SPY   CASH
Date
2011-01-10 150 100 50 400 100 1.0
2011-01-13 250 200 500 100 100 1.0
2011-01-13 250 200 500 100 100 1.0
2011-01-26 100 150 100 300 50 1.0

现在,我初始化第三个数据框:'

df_trades = pd.DataFrame(0, df_prices.index, columns=list(df_prices))

我需要使用前两个日期帧用正确的值填充此数据帧。如果我BUY AAPL ,我想乘Shares来自orders_df价格为AAPL-1 。如果是SELL我不会乘以-1 。我将该值放入正确的 CASH 中柱子。对于其他列,我只需复制 Shares每只股票在交易日的情况。

            AAPL IBM  GOOG XOM  SPY   CASH
Date
2011-01-10 100 0 0 0 0 -15000
2011-01-13 -200 0 0 0 0 50000
2011-01-13 0 100 0 0 0 -20000
2011-01-26 0 0 -200 0 0 20000

我如何实现df_trades使用矢量化运算?

更新

如果我这样做会怎样:

df_prices = get_data(symbols, orders_df.index, addSPY=False)
df_prices.loc[:, 'CASH] = 1.0

打印出来

          AAPL     IBM    GOOG    XOM     SPY  CASH
2011-01-10 340.99 143.41 614.21 72.02 123.19 1.0
2011-01-11 340.18 143.06 616.01 72.56 123.63 1.0
2011-01-12 342.95 144.82 616.87 73.41 124.74 1.0
2011-01-13 344.20 144.55 616.69 73.54 124.54 1.0
2011-01-14 346.99 145.70 624.18 74.62 125.44 1.0
2011-01-18 339.19 146.33 639.63 75.45 125.65 1.0
2011-01-19 337.39 151.22 631.75 75.00 124.42 1.0

我如何生成 df_trades然后呢?

仅供引用,示例值不再有效。

最佳答案

矢量化解决方案

j = np.array([df_trades.columns.get_loc(c) for c in orders_df.Symbol])
i = np.arange(len(df_trades))
o = np.where(orders_df.Order.values == 'BUY', -1, 1)
v = orders_df.Shares.values * o
t = df_trades.values
t[i, j] = v

df_trades.loc[:, 'CASH'] = \
df_trades.drop('CASH', 1, errors='ignore').mul(prices_df).sum(1)
df_trades

AAPL IBM GOOG XOM SPY CASH
Date
2011-01-10 -100 0 0 0 0 -15000.0
2011-01-13 200 0 0 0 0 50000.0
2011-01-13 0 -100 0 0 0 -30000.0
2011-01-26 0 0 200 0 0 20000.0

关于python - 对两个 Pandas DataFrame 进行矢量化操作以创建一个新的 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46806062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com