我有这样的数据
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之内。
我想用范围类别替换上面的dataframe值,输出应该如下所示
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,依此类推。我该怎么做?
发布于 2017-10-28 13:59:25
用一个小数学:
((df - 1) // 3).clip(0) + 1
a b c
0 1 1 1
1 2 3 3
2 2 1 1
3 1 2 2
4 2 1 2或者,用一个(需要处理的唯一角的情况)来replace所有的零,然后再进行除法。
(df.replace(0, 1) - 1) // 3 + 1
a b c
0 1 1 1
1 2 3 3
2 2 1 1
3 1 2 2
4 2 1 2发布于 2017-10-28 13:59:05
您可以使用np.digitize
In [5942]: bins = np.array([0, 4, 7, 10])
In [5943]: pd.DataFrame(np.digitize(df, bins), columns=df.columns)
Out[5943]:
a b c
0 1 1 1
1 2 3 3
2 2 1 1
3 1 2 2
4 2 1 2或作为
In [5947]: bins2 = np.array([-1, 3, 6, 9])
In [5948]: pd.DataFrame(np.digitize(df, bins2, right=True), columns=df.columns)
Out[5948]:
a b c
0 1 1 1
1 2 3 3
2 2 1 1
3 1 2 2
4 2 1 2https://stackoverflow.com/questions/46990467
复制相似问题