数据帧中值的映射范围[重复]

这个问题在这里已经有了答案
如何将数字数据映射到dataframe中的类别/容器中

(1个答案)

去年关闭了

如果以前有人问过我,我很抱歉,但是我看了很多遍,没有结果

将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame(data=np.random.randint(1,10,10),columns=['a'])
A.
0  7
1  8
2  8
3  3
4  1
5  1
6  2
7  8
8  6
9  6

我想创建一个新列b,根据一些规则映射a的几个值,比如a=[1,2,3]是1,a=[4,5,6,7]是2,a=[8,9,10]是3。一对一的映射对我来说很清楚,但是如果我想通过值列表或范围进行映射,该怎么办

我沿着这些路线思考

df['b']=df['a'].map({[1,2,3]:1,范围(4,7):2[8,9,10]:3})

有几种选择

熊猫通过pd.cut/NumPy通过np.数字化

可以构造边界列表,然后使用专家库函数。这在@EdChum的解决方案中有描述,在这个答案中也有描述

通过np进行NumPy。选择

df=pd.DataFrame(data=np.random.randint(1,10,10),columns=['a'])
标准=[df['a']介于(1,3)之间,df['a']介于(4,7)之间,df['a']介于(8,10)之间]
值=[1,2,3]
df['b']=np.select(标准、值、0)

标准的元素是布尔级数,因此对于值的列表,可以使用df['a'].isin([1,3])

通过范围映射字典

d={range(1,4):1,range(4,8):2,range(8,11):3}
df['c']=df['a'].apply(λx:next((v代表k,v代表d.items(),如果x代表k),0))
打印(df)
a、b、c
0  1  1  1
1  7  2  2
2  5  2  2
3  1  1  1
4  3  1  1
5  5  2  2
6  4  2  2
7  4  2  2
8  9  3  3
9  3  1  1

发表评论