Skip to main content
 首页 » 编程设计

python之在单元格中使用条件值在 Pandas DataFrame 中创建循环

2025年05月04日16zfyouxi

在下面的脚本中,如果 DataFrame 单元格中有 No 或 Yes,我会分配值 0 或 1。

answer= {'account': ['Adam', 'Ben', 'Tom', 'Isabel'], 
     'a1': ['No', 'Yes', 'Yes', 'No'], 
     'a2': ['No', 'Yes', 'No', 'No'], 
     'a3': ['No', 'Yes', 'No', 'No'], 
     'a4': ['Yes', 'No', 'Yes', 'Yes']} 
RPI = pd.DataFrame.from_dict(answer) 

我正在尝试为下面的 RPI.loc 语句创建循环或函数,这样我就不必重复已有的 50 列。有办法吗?

RPI.loc[RPI['a1'] == 'No', 'a1'] = 0 
RPI.loc[RPI['a1'] == 'Yes', 'a1'] = 1 
RPI.loc[RPI['a2'] == 'No', 'a2'] = 0 
RPI.loc[RPI['a2'] == 'Yes', 'a2'] = 1 
RPI.loc[RPI['a3'] == 'No', 'a3'] = 0 
RPI.loc[RPI['a3'] == 'Yes', 'a3'] = 1 
RPI.loc[RPI['a4'] == 'No', 'a4'] = 0 
RPI.loc[RPI['a4'] == 'Yes', 'a4'] = 1 
 
    a1  a2  a3  a4  account 
0   0   0   0   1   Adam 
1   1   1   1   0   Ben 
2   1   0   0   1   Tom 
3   0   0   0   1   Isabel 

请您参考如下方法:

需要replace通过 dict:

RPI = RPI.replace({'No':0, 'Yes':1}) 
print (RPI) 
   a1  a2  a3  a4 account 
0   0   0   0   1    Adam 
1   1   1   1   0     Ben 
2   1   0   0   1     Tom 
3   0   0   0   1  Isabel 

如果需要指定列替换位置添加iloc :

print (RPI.iloc[:, 0:4]) 
    a1   a2   a3   a4 
0   No   No   No  Yes 
1  Yes  Yes  Yes   No 
2  Yes   No   No  Yes 
3   No   No   No  Yes 
 
RPI.iloc[:, 0:4] = RPI.iloc[:, 0:4].replace({'No':0, 'Yes':1}) 
print (RPI) 
  a1 a2 a3 a4 account 
0  0  0  0  1    Adam 
1  1  1  1  0     Ben 
2  1  0  0  1     Tom 
3  0  0  0  1  Isabel