我有一个数据框' 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个。
答案 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]