问题描述
我正在尝试将这两个数据框(data2和交易)放在一起,使其看起来像这样https://i.stack.imgur.com/pR8bW.png:
data2:
Close
2015-08-28 113.290001
2015-08-31 112.760002
2015-09-01 107.720001
2015-09-02 112.339996
2015-09-03 110.370003
2015-09-04 109.269997
2015-09-08 112.309998
2015-09-09 110.150002
2015-09-10 112.570000
2015-09-11 114.209999
交易:
Trades
2015-08-28 3.0
2015-08-31 3.0
2015-09-01 3.0
2015-09-02 3.0
2015-09-03 2.0
代码:
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111,ylabel='Portfolio value in $')
data2["Close"].plot(ax=ax1,lw=2.)
ax1.plot(data2.loc[Trades.Trades == 2.0].index,data2.total[Trades.Trades == 2.0],'^',markersize=10,color='m')
ax1.plot(data2.loc[Trades.Trades == 3.0].index,data2.total[Trades.Trades == 3.0],'v',color='k')
plt.show()
但此错误仍在返回:
IndexingError Traceback(最近一次通话) 在()中 7个data2 [“ Close”]。plot(ax = ax1,lw = 2。) 8 ----> 9 ax1.plot(data2.loc [Trades.Trades == 2.0] .index,data2.total [Trades.Trades == 2.0], 10'^',markersize = 10,颜色='m') 11 ax1.plot(data2.loc [Trades.Trades == 3.0] .index,
3帧 在check_bool_indexer(index,key)中的/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py 2316如果mask.any(): (2317) -> 2318“不对齐的布尔系列提供为” 2319“ indexer(布尔系列的索引和” 2320“索引对象不匹配。”
IndexingError:作为索引器提供的不可对齐的布尔系列(布尔系列和被索引对象的索引不匹配)。
解决方法
两个数据帧的索引不同。我采用了为 data2 数据帧定义 masks 的方法,该模板基于 trades 数据帧中的值,并且有效。
另外,您引用的示例代码 total 不存在。更新为使用 Close
import pandas as pd
import io
import matplotlib.pyplot as plt
data2 = pd.read_csv(io.StringIO(""" Close
2015-08-28 113.290001
2015-08-31 112.760002
2015-09-01 107.720001
2015-09-02 112.339996
2015-09-03 110.370003
2015-09-04 109.269997
2015-09-08 112.309998
2015-09-09 110.150002
2015-09-10 112.570000
2015-09-11 114.209999"""),sep="\s+")
trades = pd.read_csv(io.StringIO(""" Trades
2015-08-28 3.0
2015-08-31 3.0
2015-09-01 3.0
2015-09-02 3.0
2015-09-03 2.0"""),sep="\s+")
# make sure it's dates
data2 = data2.reset_index().assign(index=lambda x: pd.to_datetime(x["index"])).set_index("index")
trades = trades.reset_index().assign(index=lambda x: pd.to_datetime(x["index"])).set_index("index")
fig = plt.figure()
ax1 = fig.add_subplot(111,ylabel='Portfolio value in $')
data2["Close"].plot(ax=ax1,lw=2.)
mask2 = data2.index.isin((trades.Trades == 2.0).index)
mask3 = data2.index.isin((trades.Trades == 3.0).index)
ax1.plot(data2.loc[mask2].index,data2.Close[mask2],'^',markersize=10,color='m')
ax1.plot(data2.loc[mask3].index,data2.Close[mask3],'v',color='k')
plt.show()