我正在尝试将这两个数据框(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', markersize=10, 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:作为索引器提供的不可对齐的布尔系列(布尔系列和被索引对象的索引不匹配)。
答案 0 :(得分:1)
两个数据帧的索引不同。我采用了为 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', markersize=10, color='k')
plt.show()