2017-10-21 8 views
1

[{'out'}、{'out'、 'soak'}の値を持つ列df ['dead_notdead']を持つデータフレーム 'df'があります。 ....] df ['Fatal']という名前の列を作成したい場合、df ['dead_notdead']の値が空の場合、df ['Fatal']は0以外である必要があります。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) 

T彼は、kは0

答えて

1

オプション1
piRSquared's improvementがセットのfalseynessを悪用含ま他のいくつかの値を持っている場合、新しいカラムは1を持つべきである必要なものをいくつかの未知のerror.Overallを与えています。

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

{}Falseに変換ので、これは動作します!


オプション2
あなたはstr.lenを呼び出し、astypeを使用して整数型に結果boolean型マスクを変換することができます。

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

あなたがastを使用して、文字列(ないsetオブジェクト)の列、最初にそれを変換している場合:

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

@JonClements Oops、major typo there。 –

+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]

関連する問題