微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – Pandas:按范围对列值进行分类

我有一个数据帧,df是这样的

a  b  c
1  0  2
5  7  8
4  1  3
3  4  6
5  2  5
.......

现在我想用以下范围替换这些数据

0-3 = 1
4-6 = 2
7-9 = 3

列值小于10,因此范围在0-9之内.

我想用范围类别替换上面的数据帧值,输出应该是这样的

a  b  c
1  1  1
2  3  3
2  1  1
1  2  2
2  1  2
.......

因此,如果df中的任何值在0-3之内,则应替换为1,如果4-6内的任何值将其替换为2,依此类推.
我怎样才能做到这一点?

解决方法:

使用pd.cut与申请即

df.apply(lambda x : pd.cut(x,[-1,3,6,9],labels=[1,2,3]))
   a  b  c
0  1  1  1
1  2  3  3
2  2  1  1
3  1  2  2
4  2  1  2

@coldspeed建议的基于非应用的解决方案:

pd.DataFrame(pd.cut(df.values.reshape(-1,),[-1,3,6,9],labels=[1,2,3]).codes.reshape(df.shape)+1,columns=df.columns)

要么

pd.DataFrame(pd.cut(np.hstack(df.values),[-1,3,6,9],labels=[1,2,3]).codes.reshape(df.shape)+1,columns=df.columns)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐