python - 更有效地替换 Pandas Dataframe 中多列的值
问题描述
我有一个 DataFrame, df
,我想在其中替换几个值
用户1 | 用户2 | 用户3 |
---|---|---|
苹果 | 哟 | 苹果 |
芒果 | 内存 | 芒果 |
而不是做
df['user1'] = df['user1'].replace(['apple','mango'], [0, 1])
df['user3'] = df['user1'].replace(['apple','mango'], [0, 1])
df['user2'] = df['user2'].replace(['yoo','ram'], [2, 3])
得到最终的DataFrame
用户1 | 用户2 | 用户3 |
---|---|---|
0 | 2 | 0 |
1 | 3 | 1 |
有什么方法可以让上面的代码更高效,这样我就可以用一行代码来改变 apple、mango、yoo 和 ram 的值?
解决方案
如果需要按每列的唯一值设置范围,请使用:
cols = ['user1','user2','user3']
s = df[cols].unstack()
df[cols] = pd.Series(pd.factorize(s)[0], index=s.index).unstack(0)
print (df)
user1 user2 user3
0 0 2 0
1 1 3 1
推荐阅读
- java - FluentWait 类型中的方法 until(Function) 不适用于参数
- java - 当我单击按钮时,JPanel 会缩小
- lisp - 改变lisp中数字的表示?
- javascript - 根据其他数组键值获取数组值总和
- vue.js - 从 Highchart 事件内部更改 VueJS 组件数据值
- arrays - 无法使用地图功能 react-native
- c# - asp.net core 中的 TryValidateModel 在执行单元测试时抛出空引用异常
- docker - 在 Apache Aurora 中强制拉取 docker 镜像
- r - R中的网络抓取,一个与电子邮件相关的奇怪跨度类
- x86 - VEX 前缀编码和 SSE/AVX MOVUP(D/S) 指令