我有两个不同的同一股票的数据框架,但是一个数据框架有更多的数据和不同的价格。 我想比较其中一列,看看它们的不同之处。 (以下是数据帧的较小版本)
df
Date Open Close
2007-03-22 3.65 1.0
2007-03-23 3.87 1.0
2007-03-26 3.83 1.0
2007-03-27 3.61 1.0
2007-03-28 4.65 1.0
df2
Date Open Close
2007-03-22 3.15 1.0
2007-03-23 3.87 0.0
2007-03-26 3.33 0.0
2007-03-27 3.61 0.0
2007-03-28 4.65 0.0
由于其中一个数据框有更多日期,我尝试使用loc对其进行切片,然后使用布尔索引来找出它们的不同之处。
我试过像这样的
df.Open[df.loc['2010-01-04':, 'Open'] != df2.loc['2010-01-04':, 'Open']]
我只想比较" Open"两个数据框的列,仅在一片日期。我希望输出只是df.Open列(和索引),它们在各自的“开放”字段中有所不同。列。
但我收到了错误,
pandas.core.indexing.IndexingError: Unalignable boolean Series key provided
答案 0 :(得分:3)
使用布尔索引时,要进行子集化的对象必须与布尔系列具有相同的长度,请尝试以下操作:
df.Open.loc['2010-01-04':][df.loc['2010-01-04':, 'Open'] != df2.loc['2010-01-04':, 'Open']]
使用此示例可以重现错误:
df = pd.DataFrame({"A": [1,2,3,4]})
df.A[df.loc[2:, 'A'] == df.loc[2:, 'A']]
IndexingError:提供了无法对齐的布尔系列键
但这很好用:
df.A.loc[2:][df.loc[2:, 'A'] == df.loc[2:, 'A']]
#2 3
#3 4
#Name: A, dtype: int64