首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为每个DataFrame行生成一个NumPy数组

为每个DataFrame行生成一个NumPy数组
EN

Stack Overflow用户
提问于 2021-12-01 18:52:47
回答 2查看 44关注 0票数 0

我正在尝试使用mplfinance.plot()来绘制针对特定股票的股票市场交易图。我使用作为CSV文件的jstock来记录我的所有交易:

代码语言:javascript
复制
"Code","Symbol","Date","Units","Purchase Price","Current Price","Purchase Value","Current Value","Gain/Loss Price","Gain/Loss Value","Gain/Loss %","Broker","Clearing Fee","Stamp Duty","Net Purchase Value","Net Gain/Loss Value","Net Gain/Loss %","Comment"
"ASO","Academy Sports and Outdoors, Inc.","Sep 13, 2021","25.0","45.85","46.62","1146.25","1165.5","0.769999999999996","19.25","1.6793893129770994","0.0","0.0","0.0","1146.25","19.25","1.6793893129770994",""
"ASO","Academy Sports and Outdoors, Inc.","Aug 26, 2021","15.0","41.3","46.62","619.5","699.3","5.32","79.79999999999995","12.881355932203384","0.0","0.0","0.0","619.5","79.79999999999995","12.881355932203384",""
"ASO","Academy Sports and Outdoors, Inc.","Jun 3, 2021","10.0","37.48","46.62","374.79999999999995","466.2","9.14","91.40000000000003","24.386339381003214","0.0","0.0","0.0","374.79999999999995","91.40000000000003","24.386339381003214",""
"RMBS","Rambus Inc.","Nov 24, 2021","2.0","26.99","26.99","53.98","53.98","0.0","0.0","0.0","0.0","0.0","0.0","53.98","0.0","0.0",""

我可以很容易地使用以下命令获取这些数据

代码语言:javascript
复制
myportfolio = pd.read_csv(PORTFOLIO_LOCATION, parse_dates=[2])

但我需要为每个交易创建与每日股票价格匹配的单独列表:

代码语言:javascript
复制
Date,High,Low,Open,Close,Volume,Adj Close
2020-12-01,17.020000457763672,16.5,16.799999237060547,16.8799991607666,990900,16.8799991607666
2020-12-02,17.31999969482422,16.290000915527344,16.65999984741211,16.40999984741211,1200500,16.40999984741211

我有一个普通的包含这个的DataFrame。到目前为止,我得到的是:

代码语言:javascript
复制
for i in myportfolio.groupby("Code"):
    (code, j) = i
    if code == "ASO": # just testing it against one stock
        simp = pd.DataFrame(columns=["Date", "Units", "Price"],
            data=j[["Date", "Units", "Purchase Price"]].values, index=j[["Date"]])
        df = pd.read_csv("ASO-2020-12-01-2021-12-01.csv", index_col=0, parse_dates=True)
        # df.lookup(simp["Date"])
        df.insert(0, 'row_num', range(0,len(df)))
        k = df.loc[simp["Date"]]['row_num']
        trades = []
        for index, m in k.iteritems():
            t = np.zeros((df.shape[0], 1))
            t.fill(np.nan)
            t[m] = simp[index]["Price"]
            trades.append(t.to_list())

但是我收到了一个KeyError: Timestamp('2021-09-17 00:00:00')

有什么办法解决这个问题吗?

附录1:

代码语言:javascript
复制
import pandas as pd
trade_data = [['ASO', '5/5/21', 10], ['ASO', '5/6/21', 12], ['RBLX', '5/7/21', 15]]
trade_df = pd.DataFrame(trade_data, columns = ['Code', 'Date', 'Price'])
trade_df['Date'] = pd.to_datetime(trade_df['Date'])
trade_df

    Code    Date    Price
0   ASO 2021-05-05  10
1   ASO 2021-05-07  12
2   RBLX    2021-05-07  15

aso_data = [['5/5/21', 12, 5, 10, 7], ['5/6/21', 15, 7, 13, 8], ['5/7/21', 17, 10, 15, 11]]
aso_df = pd.DataFrame(aso_data, columns = ['Date', 'High', 'Low', 'Open', 'Close'])
aso_df['Date'] = pd.to_datetime(aso_df['Date'])
aso_df

    Date    High    Low Open    Close
0   2021-05-05  12  5   10  7
1   2021-05-06  15  7   13  8
2   2021-05-07  17  10  15  11

因此,我想为ASO创建两个NumPy数组(每个交易一个)和一个RBLX交易。对于ASO,我应该有两个看起来像[10, Nan, Nan][NaN, NaN, 12]的NumPy数组。

EN

回答 2

Stack Overflow用户

发布于 2021-12-01 18:59:52

你想要一个列表列表吗?不需要循环。

代码语言:javascript
复制
df_list = df.values.tolist()
票数 0
EN

Stack Overflow用户

发布于 2021-12-09 11:34:24

以防其他像我这样的新手遇到类似的问题。

代码语言:javascript
复制
for i in myportfolio.groupby(["Code"]):
    (code, j) = i
    if code == "ASO": # just testing it against one stock
        df = pd.read_csv("ASO-2020-12-01-2021-12-01.csv", index_col=0, parse_dates=True)
        df.insert(0, 'row_num', range(0,len(df)))
        k = df.loc[j["Date"]]['row_num']
        trades = []
        for index, m in j.iterrows(): 
            t = np.zeros((df.shape[0], 1))
            t.fill(np.nan)
            t[int(df.loc[m["Date"]]['row_num'])] = m["Purchase Price"]
            asplot = mpf.make_addplot(t, type="scatter", color='red', marker="D")
            trades.append(asplot)
        mpf.plot(df, type='candle', addplot=trades)

生成了一个显示我的入口点的my图。祝好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70189742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档