根据几乎匹配的 unix 时间戳将 Numpy 数组的值分配给 Pandas DataFrame

Assign values from Numpy Array to Pandas DataFrame based on almost matching unix timestamp

我得到了一个 2D numpy 数组和一个巨大的 pandas DataFrame。它们的虚拟示例看起来有点像这样:

arr = np.array([[1648137283, 0],
                [1648137284, 1],
                [1648137285, 2],
                [1648137286, 3],
                .....
                [1658137287, 4],
                [1658137288, 5],
                [1658137289, 6]])

df.head(-6)
            unix         ...   value_a 
0           1643137283   ...     23
1           1643137284   ...     54
2           1643137285   ...     25
...          ...         ...     ...   
10036787    1653174068   ...     75
10036788    1653174069   ...     65
10036789    1653174070   ...     23

arr 的第一列是 unix 时间戳,第二列是 id 值。 DataFrame 也有一列用于 unix 时间戳。我的目标是根据 unix 时间戳将 id 值从 arr 映射到名为 'index'.

的单独新列中对应的 df 时间戳

现在,这些可能是重要的注释:

我可以在循环中或使用 np.where() 来完成此操作。但是,由于 arrdf 非常大,我希望有一个快速的解决方案。

思路是将numpy数组转换为包含key-val对的映射,其中key是unix时间戳,value是对应的id,然后可以用series.map到substitute/map给定数据框中的值

df['index'] = df['unix'].map(dict(arr))

示例输出

                unix  ...  value_a  index
0         1643137283  ...       23      0
1         1643137284  ...       54      1
2         1643137285  ...       25      2
10036787  1653174068  ...       75      3
10036788  1653174069  ...       65      5
10036789  1653174070  ...       23      6