如何根据Python中的exsisting列更新新列

时间:2017-10-21 12:56:49

标签: python pandas dictionary

我有一个数据框' df'列df [' dead_notdead']的值为[{' out'},{' out'' soak'} .. ...]我想创建一个名为df [' Fatal']的列,如果df [' dead_notdead']的值为空,那么df ['致命' ]应为0,否则为1。

文件格式 df size 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有一些值,那么新列应该有1个。

2 个答案:

答案 0 :(得分:1)

选项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)

答案 1 :(得分:0)

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

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