如何在Python已有列的基础上更新新列

2024-09-28 16:21:21 发布

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

我有一个数据帧'df',列df['dead\u notdead'],它的值为[{'out'},{'out','stike'}…]我想创建一个名为df['Fatal']的列,如果df['dead\u notdead']的值为空,那么df['Fatal']应该是0或者1

文件格式 df尺寸16343

Input
    index      Dead_notdead
    0           {'out'}
    1            {}
    2            {'out','shock,'kill'}  

Output
   index    Dead_notdead             Fatal
    0       {'out'}                   1
    1        {}                       0 
    2       {'out','shock','kill'}    1

试用代码:

k=df['Dead_notdead']
s=[]

for (i in range(len(k)):
  if(len(k)==2):
    s.append(0)
  else:
    s.append(1)

这是一个未知错误。总的来说,如果k的值为0,则新列应该为1


Tags: 数据dfinputindexlen尺寸outkill
2条回答

你可以把这个逻辑放在一个列表里。它创建了一个列表,可以像序列一样传递到新列中

df['Fatal'] = [1 if len(item) > 0 else 0 for item in df.Dead_notdead]

选项1
piRSquared's improvement涉及利用集合的虚假性

df['Fatal'] = df['Dead_notdead'].astype(bool).astype(int)

这是因为{}转换为False


选项2
您可以调用str.len,并使用astype将结果布尔掩码转换为整数类型

df['Fatal'] = df['Dead_notdead'].str.len().gt(0).astype(int)

如果有一列字符串(不是set对象),请首先使用ast转换它:

import ast
df['Dead_notdead'] = df['Dead_notdead'].apply(ast.literal_eval)

相关问题 更多 >