[英]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.