使用データ
# 使用データ
df
name | room_type | |
---|---|---|
0 | ホテルA | スーペリアツインルーム禁煙 |
1 | ホテルB | スーペリアツインルーム喫煙 |
2 | ホテルC | デラックスツインルーム |
3 | ホテルD | スタンダードツインルーム禁煙 |
4 | ホテルE | ダブルルーム |
5 | ホテルF | デラックスダブルルーム禁煙 |
6 | ホテルG | スタンダードツインルーム禁煙 |
7 | ホテルH | デラックスキングルーム |
このようなものを用意しました。
Goal
room_typeに'スーペリア'、'デラックス'と名前がつくものに1、そうでないものに0を付与した新しいカラムを生成する。
実施事項
new_room_type_list = []
for i in range(8):
if 'スーペリア' in df['room_type'][i]:
a = 1
elif 'デラックス' in df['room_type'][i]:
a = 1
else:
a = 0
new_room_type_list.append(a)
このようにしてlistを作成
その後dfに追加する。
# dfに作成したnew_room_type_listをdf['new_room_type']として追加する。
df['new_room_type'] = new_room_type_list
確認してみる
df
name | room_type | new_room_type | |
---|---|---|---|
0 | ホテルA | スーペリアツインルーム禁煙 | 1 |
1 | ホテルB | スーペリアツインルーム喫煙 | 1 |
2 | ホテルC | デラックスツインルーム | 1 |
3 | ホテルD | スタンダードツインルーム禁煙 | 0 |
4 | ホテルE | ダブルルーム | 0 |
5 | ホテルF | デラックスダブルルーム禁煙 | 1 |
6 | ホテルG | スタンダードツインルーム禁煙 | 0 |
7 | ホテルH | デラックスキングルーム | 1 |
こんな感じでうまく追加することができた。
おまけ:.str.contains()の使用
df['room_type'].str.contains('スーペリア')
0 True
1 True
2 False
3 False
4 False
5 False
6 False
7 False
Name: room_type, dtype: bool
このようにどの行に'スーペリア'が出てくるなどはわかるが、.str.contains()はDataFrame全体に及ぶものなので1行1行をみていくif文などには向かないと判断したため上記の方法を用いた