查找并替换列表中的部分值
Look up and replace partial values in a list
我有列表 A,其中包含以“|”分隔的值看起来像这样
df1['original']= ['aaa|bbb|ccc','aaa|ccc','aaa|ccc|ddd']
输出:
aaa|bbb|ccc
aaa|ccc
aaa|ccc|ddd
在另一个df中,我还有另外两列。第一个看起来像这样:df1['title']=['aaa','bbb','ccc','ddd']
。
相应地,我在 df1['title'] 旁边还有一列。
df1['new_value']=['x','y','z','w']
.
输出:
title new_value
aaa x
bbb y
ccc z
ddd w
我想搜索df1['original']
中的每个值,并替换为基于df1['title']
和df1['new_value']
的搜索结果。我想保留原始列中的|
。最终输出应如下所示:
df1['New']=['x|y|z','x|z','x|z|w']
输出:
新
x|y|z
x|z
x|z|w
这更像是 excel 中的条件查找以及如何在 python 中实现此目的的任何想法?
感谢您的宝贵时间!
下面的link只能匹配包含一个值的。
查找并替换列表中的值 (pandas)
这个使用 format
方法的邪恶黑客怎么样?
In = ['aaa|bbb|ccc','aaa|ccc','aaa|ccc|ddd']
replace = 'aaa x bbb y ccc z ddd w'
# use the infamous grouper (if you have keys and values in separate
# lists you don't need this) to get a dict:
replace = iter(replace.split())
replace = dict(zip(*2*(replace,)))
# enclose all templates with curlies
# like 'aaa|bbb|ccc' -> '{aaa}|{bbb}|{ccc}'
# and use .format
Out = [('{' + s.replace('|', '}|{') + '}').format(**replace) for s in In]
# ['x|y|z', 'x|z', 'x|z|w']
仅在 Python 中,您可以有条不紊地执行以下操作:
创建字典(这与Pandas数据框非常相似):
df1={}
df1['original']= ['aaa|bbb|ccc','aaa|ccc','aaa|ccc|ddd']
df1['title']=['aaa','bbb','ccc','ddd']
df1['new_value']=['x','y','z','w']
创建旧映射到新字典:
di=dict(zip(df1['title'], df1['new_value']))
创建描述的新字典条目:
nl=[]
for sl in [s.split('|') for s in df1['original']]:
nl.append([di[e] for e in sl])
df1['New']=['|'.join(e) for e in nl]
# {'New': ['x|y|z', 'x|z', 'x|z|w'],...}
让我们用replace
df1['New']=df1.original.replace(df2.set_index('title').new_value.to_dict(),regex=True)
df1
Out[758]:
original New
0 aaa|bbb|ccc x|y|z
1 aaa|ccc x|z
2 aaa|ccc|ddd x|z|w
我有列表 A,其中包含以“|”分隔的值看起来像这样
df1['original']= ['aaa|bbb|ccc','aaa|ccc','aaa|ccc|ddd']
输出:
aaa|bbb|ccc
aaa|ccc
aaa|ccc|ddd
在另一个df中,我还有另外两列。第一个看起来像这样:df1['title']=['aaa','bbb','ccc','ddd']
。
相应地,我在 df1['title'] 旁边还有一列。
df1['new_value']=['x','y','z','w']
.
输出:
title new_value
aaa x
bbb y
ccc z
ddd w
我想搜索df1['original']
中的每个值,并替换为基于df1['title']
和df1['new_value']
的搜索结果。我想保留原始列中的|
。最终输出应如下所示:
df1['New']=['x|y|z','x|z','x|z|w']
输出: 新
x|y|z
x|z
x|z|w
这更像是 excel 中的条件查找以及如何在 python 中实现此目的的任何想法?
感谢您的宝贵时间!
下面的link只能匹配包含一个值的。 查找并替换列表中的值 (pandas)
这个使用 format
方法的邪恶黑客怎么样?
In = ['aaa|bbb|ccc','aaa|ccc','aaa|ccc|ddd']
replace = 'aaa x bbb y ccc z ddd w'
# use the infamous grouper (if you have keys and values in separate
# lists you don't need this) to get a dict:
replace = iter(replace.split())
replace = dict(zip(*2*(replace,)))
# enclose all templates with curlies
# like 'aaa|bbb|ccc' -> '{aaa}|{bbb}|{ccc}'
# and use .format
Out = [('{' + s.replace('|', '}|{') + '}').format(**replace) for s in In]
# ['x|y|z', 'x|z', 'x|z|w']
仅在 Python 中,您可以有条不紊地执行以下操作:
创建字典(这与Pandas数据框非常相似):
df1={}
df1['original']= ['aaa|bbb|ccc','aaa|ccc','aaa|ccc|ddd']
df1['title']=['aaa','bbb','ccc','ddd']
df1['new_value']=['x','y','z','w']
创建旧映射到新字典:
di=dict(zip(df1['title'], df1['new_value']))
创建描述的新字典条目:
nl=[]
for sl in [s.split('|') for s in df1['original']]:
nl.append([di[e] for e in sl])
df1['New']=['|'.join(e) for e in nl]
# {'New': ['x|y|z', 'x|z', 'x|z|w'],...}
让我们用replace
df1['New']=df1.original.replace(df2.set_index('title').new_value.to_dict(),regex=True)
df1
Out[758]:
original New
0 aaa|bbb|ccc x|y|z
1 aaa|ccc x|z
2 aaa|ccc|ddd x|z|w