Python 两个数据帧,查找第二个数据帧的索引,其中两列的值与第一列的值匹配

Python 两个数据帧,查找第二个数据帧的索引,其中两列的值与第一列的值匹配,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,我有两个熊猫数据框,如图所示 DF1: DF2(192 x 7): 我想找到DF2的索引值,其中df1[0]&df1[1]匹配DF2[0]&DF2[2]。关于更多细节,这将在上面表示为从DF2的索引3188开始。随着DF2保持不变,DF1值将动态变化 编辑:刚刚注意到我的逻辑有一个错误。我的意思是DF1[0]==DF2[0]和DF1[1]==DF2[2]。我已经相应地更新了上面的内容。您可以找到DF2与offset=DF2.loc[(DF2[0]==DF1.loc[0,0])和(DF2[1]==

我有两个熊猫数据框,如图所示

DF1:

DF2(192 x 7):

我想找到DF2的索引值,其中
df1[0]&df1[1]
匹配
DF2[0]&DF2[2]
。关于更多细节,这将在上面表示为从DF2的索引
3188
开始。随着DF2保持不变,DF1值将动态变化


编辑:刚刚注意到我的逻辑有一个错误。我的意思是
DF1[0]==DF2[0]
DF1[1]==DF2[2]
。我已经相应地更新了上面的内容。

您可以找到
DF2
offset=DF2.loc[(DF2[0]==DF1.loc[0,0])和(DF2[1]==DF1.loc[0,1])][0]匹配的第一个位置。如果要测试其余列是否匹配,则必须使它们具有相同的形状和索引。在这种情况下,匹配行之后的DF2部分总体上小于DF1,因此一种方法如下(如果DF1较小,则流程会有点不同):


请不要发布代码、数据或回溯的图像。将其复制并粘贴为文本,然后将其格式化为代码(选择它并键入ctrl-k)。请说明不鼓励使用的原因。在笔记本中使用
打印(df)
,并按上述方式复制粘贴。谢谢,已更新。
&
是布尔运算符,列不是布尔运算符。我相信在Python中,整数上的
&
被解释为按位逻辑AND,这可能不是您想要的。您可能是指
(df1[0]==df2[0])&(df1[1]==df2[1])
,这是完全不同的。(按位逻辑AND表示Python采用数字的二进制表示形式,然后对数字的二进制数字进行应用和配对。)当Pandas比较两个数据帧时,它匹配索引。您的数据帧似乎有不同的索引,这意味着应该将什么与什么进行比较是不明确的。您似乎在问“当应用于索引时,如何找到将导致数据帧相同的偏移量”,但这并不完全清楚。
              0     1     2     3    4
0    2021-02-24  19.0  35.0  34.5  0.0
1    2021-02-24  20.0  33.0  34.5  0.0
2    2021-02-24  21.0  30.0  34.5  0.0
3    2021-02-24  22.0  28.0  34.5  0.0
4    2021-02-24  23.0  27.0  34.5  0.0
..          ...   ...   ...   ...  ...
163  2021-03-03  14.0  43.0  25.0  0.0
164  2021-03-03  15.0  47.0  25.0  0.0
165  2021-03-03  16.0  50.0  25.0  0.0
166  2021-03-03  17.0  51.0  25.0  0.0
167  2021-03-03  18.0  51.0  25.0  0.0

[168 rows x 5 columns]

              0    1     2     3     4     5    6
3171 2021-02-24  3.0   1.0   1.0  29.0  37.0  0.0
3172 2021-02-24  3.0   2.0   2.0  28.0  37.0  0.0
3173 2021-02-24  3.0   3.0   3.0  26.0  37.0  0.0
3174 2021-02-24  3.0   4.0   4.0  25.0  37.0  0.0
3175 2021-02-24  3.0   5.0   5.0  25.0  37.0  0.0
3176 2021-02-24  3.0   6.0   6.0  24.0  37.0  0.0
3177 2021-02-24  3.0   7.0   7.0  22.0  37.0  0.0
3178 2021-02-24  3.0   8.0   8.0  21.0  37.0  0.0
3179 2021-02-24  3.0   9.0   9.0  21.0  37.0  0.0
3180 2021-02-24  3.0  10.0  10.0  22.0  37.0  0.0
3181 2021-02-24  3.0  11.0  11.0  23.0  37.0  0.0
3182 2021-02-24  3.0  12.0  12.0  26.0  37.0  0.0
3183 2021-02-24  3.0  13.0  13.0  29.0  37.0  0.0
3184 2021-02-24  3.0  14.0  14.0  32.0  37.0  0.0
3185 2021-02-24  3.0  15.0  15.0  33.0  37.0  0.0
3186 2021-02-24  3.0  16.0  16.0  35.0  37.0  0.0
3187 2021-02-24  3.0  17.0  17.0  35.0  37.0  0.0
3188 2021-02-24  3.0  18.0  18.0  34.0  37.0  0.0
3189 2021-02-24  3.0  19.0  19.0  33.0  37.0  0.0
3190 2021-02-24  3.0  20.0  20.0  31.0  37.0  0.0
 DF2_tail = DF2.loc[offset:].copy()
 num_rows = DF2_tail.shape[0]
 DF2_tail.index = range(num_rows)
 DF1.loc[:num_rows,[0,1]].eq(DF2_tail[[0,1]])