使用对应于同一名称的多个变体的唯一ID来统一pandas数据框中的名称的最有效方法

问题描述 投票:0回答:1
我正在对一个 DataFrame 进行一些数据分析,该 DataFrame 包含一些具有唯一 id 的列和一些具有某些名称的列,其中每个唯一 id 对应一个名称,“尽管相同的 id 可以对应于相同的一些变体”名称,并且名称/ID 的顺序可以更改。例如:

左1_idright1_id左2_idright2_id左1_姓名right1_nameleft2_nameright2_name01020304约翰·多伊简·多伊迈克·史密斯安娜·史密斯01020304约翰·A·多伊简·多伊迈克·史密斯安娜·B·史密斯03040102迈克·D·史密斯安娜·史密斯约翰·多伊简·C·多伊04030102安娜·B·史密斯迈克·D·史密斯约翰·C·多伊简·C·多伊
我想知道使用唯一 id 标准化名称的最有效方法是什么。我不在乎选择哪个版本的名称(可以更长、更短、第一个出现,无论如何,只要每列中的 ID 始终相同)。理想输出的一个例子是:

左1_idright1_id左2_idright2_id左1_姓名right1_nameleft2_nameright2_name01020304约翰·多伊简·多伊迈克·史密斯安娜·史密斯01020304约翰·多伊简·多伊迈克·史密斯安娜·史密斯03040102迈克·史密斯安娜·史密斯约翰·多伊简·多伊04030102安娜·史密斯迈克·史密斯约翰·多伊简·多伊
由于某些 ids/name 没有出现在某些列中,我想我应该迭代 id/name 的每个列对(left1_id 与 left1_name,right1_id 与 right1_name 等),使用 id 创建一个字典作为键,名称作为值,然后将所有字典连接在一起,然后将每个组合映射回每个名称列。但我认为应该有更有效的东西。

提前谢谢您,

python-3.x pandas dataframe
1个回答
0
投票

代码

cols = df.columns[df.columns.str.contains('name')] tmp = df.filter(like='id') m = (pd.concat([tmp.melt(), df[cols].melt(value_name='val2')], axis=1) .drop_duplicates('value').set_index('value')['val2'] ) df[cols] = tmp.replace(m).values
df:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.