这个问题在这里已经有了答案:
如何将数字数据映射到dataframe中的类别/容器中
(1个答案)
(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