Python 两个数据帧,查找第二个数据帧的索引,其中两列的值与第一列的值匹配
我有两个熊猫数据框,如图所示 DF1: DF2(192 x 7): 我想找到DF2的索引值,其中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[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]])