两个数据帧,找到第二个的索引,其中两列的值从第一个开始匹配

时间:2021-02-24 23:18:26

标签: python pandas dataframe indexing

如图所示,我有两个 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]。我已经相应地更新了上述内容。

1 个答案:

答案 0 :(得分:1)

您可以找到 DF2DF1offset = 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]])
相关问题