如何解决是否有一种优雅的方式将别名映射到连接的数据文件中的真实实体名称?
Source,Target
a,token
b,token2
c,token3
d,j
e,k
f,l
token,g
token2,h
token3,i
文件的结构是混合的,所以关系所在的行
a,token3
不标识网络图中的特定关系,而是定义实体 a、b 和 c 映射到的别名。
在文件的其余部分,我有标准关系 (d,j; e,k; f,l) 以及实体的真实名称被其别名替换的关系:
token,i
目前,我正在使用丑陋的“for”循环遍历文件,这样我就能够以所需的方式映射关系并获得:
a,g
b,h
c,i
但这不是一种优雅的方式,而且可能对我的 cpu 造成沉重负担。
是否有任何内置函数(可能在 Pandas 中)或一些优雅快捷的方法(几行代码)来映射 Python 中所需的文件?
解决方法
data = [
['a','token'],['b','token2'],['c','token3'],['d','j'],['e','k'],['f','l'],['token','g'],['token2','h'],['token3','i']
]
df = pd.DataFrame(data,columns=['Source','Target'])
source_to_target = {row.Source: row.Target for row in df.itertuples()}
df.loc[:,'AliasedTarget'] = df.loc[:,'Target'].apply(lambda x: source_to_target.get(x,x))
print(df.head())
Source Target AliasedTarget
0 a token g
1 b token2 h
2 c token3 i
3 d j j
4 e k k
,
IIUC,你可以试试:
- 从
source
/target
获取公共元素。 - 将
common elements
中target
的值替换为所需的值。 - 删除带有
common elements
的行。
import numpy as np
common_elements = np.intersect1d(df.Source.values,df.Target.values)
df.Target = df.Target.replace(dict(df[df.Source.isin(common_elements)].values))
df = df[~df.Source.isin(common_elements)]
输出:
Source Target
0 a g
1 b h
2 c i
3 d j
4 e k
5 f l
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。