2016-12-09 21 views
3

新しい列を追加したいpandasデータフレームがあります。新しい列の値は、boolを含むデータフレーム内の既存の列によって決まります。以下のコードはPythonで適用されたC++のロジックですが、これを行うにはもっと「pythonic」な方法が必要です。 'isfixed'はboolsが含まれており、新しい列が助けを事前に'color code'既存の列のbool値に基づいてpandasデータフレームに列を追加する

for i in range(data_2015['isfixed'].count()): 
    if data_2015['isfixed'][i] == True: 
     data_2015['color code'][i] = 'Blue' 
    else: 
     data_2015['color code'][i] = 'Green' 

感謝されます!

+1

私はこのアプローチが完璧にpythonicしかし非常にpandonicではないと言うでしょう! –

答えて

2

あなたはnumpy.whereを使用することができます。

import numpy as np 
data_2015['color_code'] = np.where(data_2015['isfixed'], 'Blue', 'Green') 

デモ:純粋なパンダのソリューションについては

df = pd.DataFrame({'isfixed': [True, False, True]}) 

df 
Out: 
    isfixed 
0 True 
1 False 
2 True 


df['color_code'] = np.where(df['isfixed'], 'Blue', 'Green') 

df 
Out: 
    isfixed color_code 
0 True  Blue 
1 False  Green 
2 True  Blue 
+0

ありがとう@ayhan。私はこれが好きです、ただ一つの行。ピジョンソニックのルール! – ProficientInMath

+0

ようこそ。ちょっとメモ:これはdf ['color_code'] = ['blue'で行df ['isfixed']] 'の行を 'Green'にした場合でも行うことができますが、numpy/pandasの組み込み関数は一般にはシリーズ/アレイの反復処理よりも高速です。 – ayhan

+0

私はスピードに関して一連の繰り返しについて警告されています。私の理解は、各要素を繰り返し処理するのではなく、シリーズ全体で機能を適用するのが最も速いということです。 – ProficientInMath

0

df = pd.DataFrame({'isfixed': [True, False, True]})

df['color_code'] = ["Blue" if value==True else "Green" for value in df['isfixed']]

関連する問題