2017-05-11 11 views
0

私は条件付きでpandasを使用して別の列を作成していますが、ループする必要があるデータセットに約103の条件があります。 if-elif-elseステートメントを作成する方法はありますか?多くのステートメントを作成する必要はありませんか?パンダに別の列を作成する複数のIF文

私の範囲私は、ifを得た例外は3、7、14、17、53、および54

ある1から53までのNまたはSで終わるカテゴリの名前を持つ文字列の2種類があります-elif-elseが起動しましたが、私は約100以上のelif文を持ちます。カテゴリが1N言えば、例えば、私は1

私のデータを示すインデックス列に行を作成します。

data_frame['column'].head(5) 
Out[2]: 
0 1N 
1 1N 
2 1N 
3 1N 
4 2N 
Name: column, dtype: object 

声明:

#loop 
def index(c): 
    if c['column'] == '1N': 
     return 1 
    elif c['column'] == '1S': 
      return 2 
    elif c['column'] == '2N': 
      return 3 
    else: 
     return 'Undefined' 

data_Frame['Index'] = data_frame.apply(index, axis = 1) 

チェック結果:

data_frame[['column', 'Index']].head(5) 
Out[7]: 
    Column Index 
0 1N  1 
1 1N  1 
2 1N  1 
3 1N  1 
4 2N  3 

試行1:私はフロートを取得していますが、10進数です書式と間違ったインデックス。それは1ではなく0から始まっています。

#Create list 
names = ["1N", "1S", "2N", "2S", "3", "4N", "4S", "5N", "5S", "6N", "6S", "7"] 
#Create function 
def index(c): 
    if c['column'] in names: 
     return names.index(c['column']) 
#Apply index to data 
data_frame['Index'] = old_info.apply(index, axis = 1) 
#results 
data_frame['Index'].head(5) 
Out[7]: 
0 0.0 
1 0.0 
2 0.0 
3 0.0 
4 2.0 
Name: Index, dtype: float64 
+0

各カテゴリ名に固有のインデックスが必要ですか?そうであれば、 'names = [" 1N "、" 1S "、" 2N "、...]'のようなリストにすべて入れてから、 'names.index(c ['column']) – Hamms

+0

はい、それぞれのカテゴリ名は一意のインデックスを取得します。ただし、各カテゴリ値はデータセット内のカウントが異なり、すべてが自分のデータセットに配置されるわけではありません。私はそれを実行することができましたが、いくつかの値を見つけることができなかったのでエラーが発生しました。見つけることができない場合、「戻る」スキップを行う方法はありますか? ValueError:( "'27'はリストにありません、 '93'で発生しました) –

+1

' c ['column']が名前の場合:return names.index(c ['column']) ' – Hamms

答えて

0

@Hammsに基づいて解決策を作成することができました。再現可能な例を次に示します。

import pandas as pd 
#Create dataframe 
column = ['1N', '1N', '1N', '1N', '2N'] 
data_frame = pd.DataFrame(column, columns = ['column']) 

#Create list 
names = ["1N", "1S", "2N", "2S", "3", "4N", "4S", "5N", "5S", "6N", "6S", "7"] 
#Create function 
def index(c): 
    if c['column'] in names: 
     i = names.index(c['column']) 
     return str(i + 1) 
#Create index column based on names list  
data_frame['Index'] = data_frame.apply(index, axis = 1)  

#Check result 
data_frame[['Index', 'column']] 
Out[26]: 
    Index column 
0  1  1N 
1  1  1N 
2  1  1N 
3  1  1N 
4  3  2N 
関連する問題