Python 应用这两个数据帧时,数据帧loc中出现错误

Python 应用这两个数据帧时,数据帧loc中出现错误,python,pandas,dataframe,loc,Python,Pandas,Dataframe,Loc,我试图将这两个数据帧(数据2和交易)放在一起,使其看起来像这样: 数据2: 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

我试图将这两个数据帧(数据2和交易)放在一起,使其看起来像这样:

数据2:

            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
代码:

但这是返回错误:


IndexingError回溯(最近一次调用上次) 在() 7数据2[“关闭”]绘图(ax=ax1,lw=2) 8. ---->9 ax1.绘图(data2.loc[trades.trades==2.0]。索引,data2.total[trades.trades==2.0], 10'^',markersize=10,color='m') 11 ax1.绘图(data2.loc[trades.trades==3.0]。索引

3帧 /检查索引器(索引,键)中的usr/local/lib/python3.6/dist-packages/pandas/core/index.py 2316如果掩码为.any(): 2317 raise索引错误( ->2318“不可对齐的布尔级数提供为” 2319“索引器(布尔级数和的索引” 2320“索引对象不匹配)。”


IndexingError:作为索引器提供的不可对齐的布尔序列(布尔序列的索引和索引对象的索引不匹配)。

两个数据帧的索引不同。我采用了为data2 dataframe定义掩码的方法,该方法基于trades dataframe中的值,并且有效

另外,您的示例代码引用的是不存在的total。请更新以使用Close

输出

正在同一点绘制“^”和“v”,你知道为什么吗?我定义掩码的方式有错误。应该是
mask2=data2.index.isin(trades.loc[trades.trades==2.0].index)mask3=data2.index.isin(trades.loc[trades.trades==3.0].index)
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()
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()