Python 如何检查数据帧多索引子集之间的相等性?
假设我有两个数据帧Python 如何检查数据帧多索引子集之间的相等性?,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有两个数据帧df1和df2,每个数据帧都有一个多索引。第一个多索引列是['A'、'B'、'C'、'D'],第二个['A'、'B'] 我想获取包含df1行的数据帧df,其中df1[['A','B']==df2[['A','B']]。当['A','B']是my df的某些列时,此语法有效,但当['A','B']在索引中时,此语法无效。(我宁愿避免df.reset\u index()) 以下是最简单的示例: L = ([["foo","blih",23,1], ["foo","blah
df1
和df2
,每个数据帧都有一个多索引。第一个多索引列是['A'、'B'、'C'、'D']
,第二个['A'、'B']
我想获取包含df1
行的数据帧df
,其中df1[['A','B']==df2[['A','B']]
。当['A','B']
是my df的某些列时,此语法有效,但当['A','B']
在索引中时,此语法无效。(我宁愿避免df.reset\u index()
)
以下是最简单的示例:
L = ([["foo","blih",23,1],
["foo","blah",2,13],
["bar","blih",1,23],
["bar","blah",2,31]])
example = pd.DataFrame(L,columns = ["A","B","value1","value2"])
L2 = ([["blih",23,1],
["blih",1,23]])
example2 = pd.DataFrame(L2,columns = ["B","value1","value2"])
example = example.set_index(["A","B"])
example2 = example2.set_index(["B"])
以下是数据帧示例
:
value1 value2
A B
bar blih 1 23
blah 2 31
foo blih 23 1
blah 2 13
和示例2
:
value1 value2
B
blih 23 1
blih 1 23
预期输出:示例的行,其中示例['B']==example2['B']
value1 value2
A B
bar blih 1 23
foo blih 23 1
您希望匹配多个列值,其中一些列值在索引中,而另一些列值不在索引中
DataFrame.merge
确实是您想要的
example.reset_index().merge(example2).set_index(['A', 'B'])
输出:
value1 value2
A B
bar blih 1 23
foo blih 23 1
需要在左侧数据框上重置索引的唯一原因是合并不会为非键的索引列保留多索引。就是
example.merge(example2, on=['B', 'value1', 'value2'])
产出:
value1 value2
B
blih 23 1
blih 1 23
你能添加一些数据样本吗?我添加了一个最小的示例OK,预期的输出是什么?当然,没有符合该条件的行,但你已经知道了。哦,抱歉,小错误,我正在查找
example['B']==example2['B']
的行!修好了。我还把我想要的精确化为输出