将pandas df列的值转换为uniqueidentifiers

橡树

我有两个熊猫数据框,如下所示:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章