我试图做:
input1['Signature_Fixed'] = 'NONE'
i = 0
for row in input1['Signature']:
if (row == 'Competitor'):
input1['Signature_Fixed'][i] = input1['brand'][i]
else:
input1['Signature_Fixed'][i] = input1['Signature'][i]
i = i + 1
当我处理1K行时,它可以工作,但是我有SettingWithCopyWarning
,那么当我处理2M行时,则无法工作。
您能帮我解决这个问题,或者用loc
/ iloc
进行转换吗?
答案 0 :(得分:0)
input1['Signature_Fixed'][i]
表示链接索引,在官方文档中为explicitly discouraged。尽可能避免。
在这种情况下,您可以使用pd.Series.mask
来完全避免for
循环:
bool_mask = df['Signature'] == 'Competitor'
df['Signature_Fixed'] = df['Signature'].mask(bool_mask, df['brand'])
语法上的想法是对 vectorized 方式的列进行操作,而不是对行循环进行操作。