[英]Creating a reverse dummy variable
我想從我的 dataframe 的不同列創建一個反向虛擬變量。
dataframe 列如下所示:
client booking_by_phone booking_online booking_online ... no_call_ad no_sms_ad no_ad_other
2q332 1 0 0 1 1 0
as4e3 0 0 1 0 0 0
ad222 0 1 0 1 0 0
q2x31 1 0 0 1 1 1
我目前的方法運行成功,但自從我使用iterrows()
以來需要很長時間
for idx, _ in df.iterrows():
if df.loc[idx, 'booking_by_phone'] == 1:
df.loc[idx, 'bookingchannel'] = "phone"
elif df.loc[idx, 'booking_online'] == 1:
df.loc[idx, 'bookingchannel'] = "online"
else:
df.loc[idx, 'bookingchannel'] = "agency"
對於第二個變量,它需要更長的時間,因為用戶可能拒絕了多個頻道的廣告,所以我不能使用 elif:
for idx, _ in df.iterrows():
df.loc[idx, 'ad_ban'] = 0
if df.loc[idx, 'no_email_ad'] == 1:
df.loc[idx, 'ad_ban'] += 1
if df.loc[idx, 'no_mail_ad'] == 1:
df.loc[idx, 'ad_ban'] += 2
if df.loc[idx, 'no_call_ad'] == 1:
df.loc[idx, 'ad_ban'] += 4
if df.loc[idx, 'no_catalog_ad'] == 1:
df.loc[idx, 'ad_ban'] += 8
if df.loc[idx, 'no_sms_ad'] == 1:
df.loc[idx, 'ad_ban'] += 16
if df.loc[idx, 'no_ad_other'] == 1:
df.loc[idx, 'ad_ban'] += 32
有沒有更快更簡單的方法來做到這一點?
讓我們看看預訂渠道。 這是使用 boolean 掩碼的方法:
df['booking channel'] = 'agency' # default value
mask = df['booking_by_phone'] == 1
df.loc[mask, 'booking channel'] = 'phone'
mask = df['booking_online'] == 1
df.loc[mask, 'booking channel'] = 'online'
您可以創建一個元組列表 - [('booking_by_phone', 'phone'), ('booking_online', 'online'), ...] 並在循環中執行分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.