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
各カテゴリ名に固有のインデックスが必要ですか?そうであれば、 'names = [" 1N "、" 1S "、" 2N "、...]'のようなリストにすべて入れてから、 'names.index(c ['column']) – Hamms
はい、それぞれのカテゴリ名は一意のインデックスを取得します。ただし、各カテゴリ値はデータセット内のカウントが異なり、すべてが自分のデータセットに配置されるわけではありません。私はそれを実行することができましたが、いくつかの値を見つけることができなかったのでエラーが発生しました。見つけることができない場合、「戻る」スキップを行う方法はありますか? ValueError:( "'27'はリストにありません、 '93'で発生しました) –
' c ['column']が名前の場合:return names.index(c ['column']) ' – Hamms