如何在python中向数据帧添加多个标签

2024-04-25 17:05:52 发布

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

我有一个数据帧和一个节点列表,如下所示。你知道吗

     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)

然而,我不知道我如何才能如果条件,将数据划分为类别。你知道吗

如有需要,我很乐意提供详细资料。你知道吗


Tags: 数据node列表节点nnmmlljj
2条回答

首先将列表转换为数据帧

然后应用^{}

使用df.loc并应用条件

然后放下node_values

nodes = [["node4", 0.9], ["node2", 1.0], ["node3", 0.8]]
node_values = pd.DataFrame(nodes,columns=["node","node_value"])

df = pd.merge(df,node_values,on=['node'],how='left')
df.loc[(df['node_value']<=0.8) & (df['node_value']>=0.6),"level"] = "mid"
df.loc[(df['node_value']>0.8),"level"] = "high"
df.loc[(df['node_value']<0.6),"level"] = "low"

df.drop(['node_value'],axis=1,inplace=True)

    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

使用^{}映射list的值,使用^{}映射值的条件赋值:

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('"',''))替换它们

相关问题 更多 >