2017-10-21 28 views
1

我有一個數據幀'df',其中列df ['dead_notdead']的值爲[{'out'},{'out','soak'}。 ....]我想創建一個名爲df ['Fatal']的列,如果df ['dead_notdead']的值爲空,那麼df ['Fatal']應該爲0其他1.如何更新基於Python中已有列的新列

文件格式 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) 

Ť他是給一些不知名的error.Overall什麼需要的是新列應該有1如果k具有一定的價值,否則爲0

回答

1

選項1
piRSquared's improvement涉及開發的集falseyness。

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) 
+0

@JonClements哎呀,大錯字那裏。 –

+0

難道你不想在那裏有一個'.map(bool).astype(int)'嗎? –

+0

@JonClements'.gt(0)'=('> 0')生成一個布爾值掩碼,然後使用jstype將其轉換爲'0s/1s'列。 –

0

你可以把這種邏輯在列表理解。它創建一個列表,可以像一系列一樣傳遞到新列。

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