我希望匹配df1中的值,并将其替换为df1中df2的索引。
例如
输入df1
Column1
Test1
Test2
Test1, Test2
输入df2
Index ColumnA
0 Test1
1 Test2
所以,我期望的最终输出是
输出df1
Column1
0
1
0, 1
由于性能问题,我不希望迭代df1中的每个行值并进行替换,但是有一个函数可以执行此操作吗?
请帮助我。
答案 0 :(得分:3)
这似乎是一个replace
问题;你可以通过字典。
df1['Column1'].replace(
dict(zip(df2['ColumnA'], df2['Index'].astype(str))), regex=True)
0 0
1 1
2 0, 1
Name: Column1, dtype: object
如果您需要考虑子字符串(IOW,请防止匹配较大字符串的子字符串),则可以为每个模式添加单词边界。
df1 = pd.DataFrame({'Column1': ['Test1', 'Test2', 'Test1, Test2', 'Test12']})
df1
Column1
0 Test1
1 Test2
2 Test1, Test2
3 Test12
m = {rf'\b{x}\b': str(y) for x, y in zip(df2['ColumnA'], df2['Index'])}
df1['Column1'].replace(m, regex=True)
0 0
1 1
2 0, 1
3 Test12
Name: Column1, dtype: object
答案 1 :(得分:2)
尝试使用get_dummies
x=df1.Column1.str.get_dummies(',').rename(columns=dict(zip(df2.ColumnA,df2.Index)))
x.dot(x.columns.astype(str)+',').str[:-1]
Out[23]:
0 0
1 1
2 0,1
dtype: object