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 解决方案。
您可以使用带有字典的替换:
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)
您可以构建一个字典,然后使用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)
| 归档时间: |
|
| 查看次数: |
2875 次 |
| 最近记录: |