我有一个pandas数据框和以下节点列表。
node title description
0 "node1" "nn nn." "nnnn nnnn"
1 "node2" "mm mm." "mmmm mmmm"
2 "node3" "ll ll." "llll llll"
3 "node4" "jj jj." "jjjj jjjj"
nodes = [["node4", 0.9], ["node2", 1.0], ["node3", 0.8]]
我想将另一列作为
level
添加到数据框,其中high
表示节点的值高于0.8
med
表示节点的值在0.8-0.6
之间low
表示节点的值低于0.6
N/A
表示该节点不在nodes
列表中。因此,我的输出应如下所示。
node title description level
0 "node1" "nn nn." "nnnn nnnn" N/A
1 "node2" "mm mm." "mmmm mmmm" high
2 "node3" "ll ll." "llll llll" med
3 "node4" "jj jj." "jjjj jjjj" high
我当前正在使用以下代码检查节点是否在列表中(返回布尔值
0
和1
)。df['node'].isin(nodes).astype(int)
但是,我不确定如果有条件将数据分为几类,该怎么办。
如果需要,我很乐意提供矿石详细信息。
最佳答案
使用map
映射list的值,并使用np.select
进行条件赋值:
s=df.node.map(dict(nodes))
df['level']=np.select([s.lt(.6),s.ge(0.6)&s.le(.8),s.gt(0.8)],['low','med','high'],'N/A')
print(df)
node title description level
0 node1 nn nn. nnnn nnnn N/A
1 node2 mm mm. mmmm mmmm high
2 node3 ll ll. llll llll med
3 node4 jj jj. jjjj jjjj high
请注意,如果df中的字符串具有
"
,请使用df=df.applymap(lambda x: x.replace('"',''))
替换它们关于python - 如何在python中向 Pandas 数据框添加多个标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57195340/