将df1与df2匹配,然后将其替换为索引值(非内部联接)

时间:2019-01-22 18:11:50

标签: python pandas

我希望匹配df1中的值,并将其替换为df1中df2的索引。

例如

输入df1

Column1
Test1
Test2
Test1, Test2

输入df2

Index ColumnA
0     Test1
1     Test2

所以,我期望的最终输出是

输出df1

Column1
0
1
0, 1

由于性能问题,我不希望迭代df1中的每个行值并进行替换,但是有一个函数可以执行此操作吗?

请帮助我。

2 个答案:

答案 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