2017-12-28 21 views
1

私は2つの列を比較し、比較の結果に基づいて新しい列を作成するPandas Dataframeを得ました。 Logicは、次のようになります。Pandas、Python 3のロジックの場合

If df['column1']>df['column2'] : 
    df['New column']=(df['column1']+df['column2']) 
else : 
    df['New column']=(df['column1']+df['column2']+1) 

私はパンダとPythonにかなり新しいですので、私は、私は構造が間違って取得しています確信しています。皆さんは私を正しい方向に向けることができますか?

+0

のために行く:あなたはデータフレームを使用している場合

すなわちpd.npを使ってパンダからnumpyのlibararyにアクセスすることができます[boolean配列](https://docs.scipy.org/doc/numpy-1.13.0/user/basics.indexing.html#boolean-or-mask-index-arrays)についてもお読みになることをお勧めします。 numpyとpandasの両方で動作します。 – Georgy

答えて

-1

私はこれがあなたの仕事をすべきだと思います。あなたは新しい質問を開始することなく、stackoverflowで同様の質問を見つけることができますが。いずれかの方法。

import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.randint(0,10,size=(10, 2)), columns=list('AB')) 

def get_new_col_val(row): 
    if row['A'] > row['B']: 
     return row['A'] + row['B'] 
    else: 
     return row['A'] + row['B'] + 1 

df['new_col'] = df.apply(get_new_col_val, axis=1) 

これは最も簡単な方法ですが、これを行う方法は他にもあります。

お楽しみください!

+0

この質問が別の質問と似ている場合は、質問に重複して質問する必要があります。あなたが正しい特権を持っている場合 –

1

あなたはnumpyの方がずっと自由に行くことができます。 else文が1つしかない場合は、np.whereを使用します。私は

df = pd.DataFrame({'col1':[1,2,3,4,5],'col2':[1,3,4,5,2]}) 

df['where'] = pd.np.where(df['col1']>df['col2'], df['col1']+df['col2'], df['col1']+df['col2']+1) 

    col1 col2 where 
0  1  1  3 
1  2  3  6 
2  3  4  8 
3  4  5  10 
4  5  2  7 

# Not exactly by much like 
#if df['col1']>df['col2']: 
# return df['col1']+df['col2'] 
#else: 
# return df['col1']+df['col2']+1 

あなたは多くの他のはしごの場合のように、他の1以上のものを持っている場合は、np.select

m1 = df['col1']<df['col2'] 
m2 = df['col1']>df['col2'] 

df['select'] = pd.np.select([m1,m2], [df['col1']+df['col2'],0], 'equal') 
#       all conditions, all executables, final else 
    col1 col2 where select 
0  1  1  3 equal 
1  2  3  6  5 
2  3  4  8  7 
3  4  5  10  9 
4  5  2  7  0 

#Which is much like 
#if df['col1']< df['col2']: 
# return df['col1'] + df['col2'] 
#elif df['col1']>df['col2']: 
# return 0 
#else 
# return 'equal' 
+0

ありがとう!私は今Numpyを使用しています。それは本当にずっと簡単です。ありがとう! –

+0

@SalvaTdlが役に立った場合、anwerを受け入れる – Dark

関連する問題