我有一个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


我当前正在使用以下代码检查节点是否在列表中(返回布尔值01)。

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/

10-11 03:38
查看更多