Pandas中连续值与离散值的等价划分

2024-04-29 18:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过等效分区将数据帧列的连续值转换为离散值。 例如,下面是myinput。在

我想把a列中的连续值分成3个区间。在

Input:

import pandas as pd 
import numpy as np 
df = pd.DataFrame({'a':[1.1, 1.2, 1.3, 2.4, 2.5, 4.1]})

Output:

^{pr2}$

a列中,最小值是1.1,最大值是4.1,我想把它分成3 intervals。在

如您所见,每个间隔的大小等于(4.1-1.1)/3 = 1.0。因此,我可以将[1.1, 2.1)(大于或等于1.1且小于2.1)的所有值视为0,将{}内的所有值视为1,将{}内的所有值视为2。在

这是我预期的结果。在

Expected:

   a
0  0
1  0
2  0
3  1
4  1
5  2

Tags: 数据importnumpydataframepandasdfinputoutput
3条回答

您还可以使用np.digitize函数并定义容器的变体来分配标签

np.digitize(df.a,np.arange(1.1,4.1,1)) - 1

输出:

^{pr2}$

您可以将^{}与参数right = False一起用作:

pd.cut(df.a, bins=3, labels=np.arange(3), right=False)

0    0
1    0
2    0
3    1
4    1
5    2
Name: a, dtype: category
Categories (3, int64): [0 < 1 < 2]

装箱方式:

^{pr2}$

让我们来做diff和{}

df.a=(~np.isclose(df.a.diff(),0.1)).cumsum()-1 # since it is float I am using close 
df
Out[395]: 
   a
0  0
1  0
2  0
3  1
4  1
5  2

相关问题 更多 >