如图所示,我有两个 Pandas DataFrames。
DF1:
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]
DF2 (192 x 7):
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 的索引值,其中 df1[0] & df1[1]
匹配 df2[0] & df2[2]
。有关更多详细信息,这将在上面表示为从 DF2 的索引 3188
开始。 DF1 值将随着 DF2 保持不变而动态变化。
编辑:刚刚注意到我的逻辑中有错误。我的意思是 DF1[0] == DF2[0]
和 DF1[1]==DF2[2]
。我已经相应地更新了上述内容。
答案 0 :(得分:1)
您可以找到 DF2
将 DF1
与 offset = DF2.loc[ (DF2[0] == DF1.loc[0,0]) & (DF2[1] == DF1.loc[0,1])] ][0]
匹配的第一个位置。如果您想然后测试其余的列是否匹配,您必须让它们具有相同的形状和相同的索引。在这种情况下,匹配行之后的 DF2 部分总体上小于 DF1,因此一种方法如下(如果 DF1 较小,则过程会有所不同):
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]])