根据几乎匹配的 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
时间戳
现在,这些可能是重要的注释:
df
仅包含 arr
中所有时间戳的一部分
df
和 arr
沿 axis=0
的长度不同
df
中的时间戳按顺序排列并重复出现
arr
包含来自 df
的所有 unix 时间戳,但不包含
- 大约 1% 的 unix 值不完全匹配。我的 unix 在
unit='ms'
中,一些时间戳相差 +/-1 或 +/-2,但是,在我的用例中,它们可以被视为相同
我可以在循环中或使用 np.where()
来完成此操作。但是,由于 arr
和 df
非常大,我希望有一个快速的解决方案。
思路是将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
我得到了一个 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
时间戳
现在,这些可能是重要的注释:
df
仅包含arr
中所有时间戳的一部分
df
和arr
沿axis=0
的长度不同
df
中的时间戳按顺序排列并重复出现arr
包含来自df
的所有 unix 时间戳,但不包含- 大约 1% 的 unix 值不完全匹配。我的 unix 在
unit='ms'
中,一些时间戳相差 +/-1 或 +/-2,但是,在我的用例中,它们可以被视为相同
我可以在循环中或使用 np.where()
来完成此操作。但是,由于 arr
和 df
非常大,我希望有一个快速的解决方案。
思路是将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