使用查找数据帧替换数据帧中的值

Twi*_*ins 3 python lookup pandas

我想使用查找数据帧替换df数据帧中的值。

import pandas as pd

df=pd.DataFrame({
                  'no1':[20,20,40,10,50],
                  'no2':[50,20,10,40,50],
                  'no3':[30,10,50,40,50]
                  })

   no1  no2 no3
0   20  50  30
1   20  20  10
2   40  10  50
3   10  40  40
4   50  50  50

lookup=pd.DataFrame({'label':['A','B','C','D','E'],
                  'id':[10,20,30,40,50]})

    label id
0   A     10
1   B     20
2   C     30
3   D     40
4   E     50
Run Code Online (Sandbox Code Playgroud)

特别是,我想要:

   no1  no2 no3
0   B   E   C
1   B   B   A
2   D   A   E
3   A   D   D
4   E   E   E
Run Code Online (Sandbox Code Playgroud)

使用熊猫的最佳方法是什么?

PS:我在这里发现了一个非常相似的问题,但我并没有像在 R 中那样完全遵循它。感谢 Python 解决方案。

Dan*_*ejo 6

您可以使用带有字典的替换

import pandas as pd

df=pd.DataFrame({
                  'no1':[20,20,40,10,50],
                  'no2':[50,20,10,40,50],
                  'no3':[30,10,50,40,50]
                  })

lookup=pd.DataFrame({'label':['A','B','C','D','E'],
                  'id':[10,20,30,40,50]})

result = df.replace(dict(zip(lookup.id, lookup.label)))

print(result)
Run Code Online (Sandbox Code Playgroud)

输出

  no1 no2 no3
0   B   E   C
1   B   B   A
2   D   A   E
3   A   D   D
4   E   E   E
Run Code Online (Sandbox Code Playgroud)


jpp*_*jpp 5

您可以构建一个字典,然后使用np.vectorize

d = lookup.set_index('id')['label'].to_dict()  # or d = dict(np.fliplr(lookup.values))
df.iloc[:] = np.vectorize(d.get)(df.values)

print(df)

  no1 no2 no3
0   B   E   C
1   B   B   A
2   D   A   E
3   A   D   D
4   E   E   E
Run Code Online (Sandbox Code Playgroud)