我有两个熊猫数据框,如下所示:
df1
node_id lat long
0 [INET_N_855] 53.017810 23.896413
1 [INET_N_1828] 52.984994 22.241386
2 [INET_N_329] 52.881484 20.619795
3 [INET_N_1612] 46.505528 13.592806
4 [INET_N_1009] 46.503733 13.416054
... ... ... ...
4670 [SEQ_12031_p] 49.697490 12.328040
4671 [NO_N_30] 59.272825 5.519794
4672 [INET_N_379] 35.828836 14.556524
4673 [INET_N_1287] 61.638170 21.398810
4674 [Prod_33] 64.982320 6.611590
[4675 rows x 3 columns]
df2
node_id ... long
0 [INET_N_855, INET_N_1828] ... [23.896413, 22.241386]
1 [INET_N_1828, INET_N_329] ... [22.241386, 20.619795]
2 [INET_N_1612, INET_N_1009] ... [13.592806, 13.416054]
3 [INET_N_1612, INET_N_1009] ... [13.592806, 13.416054]
4 [INET_N_1612, INET_N_1009] ... [13.592806, 13.416054]
... ... ... ...
6318 [SEQ_6435_p, INET_N_379] ... [13.88715, 14.556524]
6319 [N_14_M_LMGN, INET_N_1287] ... [23.08042, 21.39881]
6320 [SEQ_12356_p, Prod_33] ... [6.755214, 6.61159]
6321 [N_261_M_LMGN, SEQ_2566_p] ... [25.34835, 25.25854]
6322 [N_261_M_LMGN, SEQ_2566_p] ... [25.34835, 25.25854]
[6323 rows x 3 columns]
df2
列'node_id'
是由来自项目df1
栏'node_id'
。遗憾的是,其中的一些项目'node_id'
太长了。因此,'node_id'
输入模拟程序时,应将这些列表项缩短到等于或小于12 个字符。
为了实现这一点,我需要一个unique_identifier_generator(df1, df2)
函数,它将条目转换df1['node_id']
为一些等于/小于 12 个字符的唯一 id,并且对df2['node_id']
匹配的唯一 id也做同样的事情。
我想我可以做熊猫元素更改部分。但是,我不知道如何创建unique_identifier_generator
函数。
你知道用什么吗?或者我应该检查什么 python 包?或者可能是从给定的字符串或给定的熊猫系列生成唯一 id 的简单方法?
这种听起来像散列函数可以做的事情,python hashlib doc中有很多这样的东西,但你可能应该选择一个没有高冲突弱点的
除此之外,您可以从 sklearn 中查看LabelEncoder,这可能会更容易一些,因为那里不应该发生碰撞
添加 id 的基本示例:
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder().fit(df.node_id)
df["id"] = encoder.transform(df.node_id)
id 可以转换为字符串或类似的东西,但在某些情况下 int 可能更有用
转换为 str 可能如下所示:
df["id"] = [f"node_{id}" for id in encoder.transform(df.node_id)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句