【问题标题】:Creating loop in Pandas DataFrame with conditional value in cell在单元格中使用条件值在 Pandas DataFrame 中创建循环
【发布时间】:2017-10-29 07:42:49
【问题描述】:

在下面的脚本中,如果 DataFrame 单元格中包含 NoYes,我分配值 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

【问题讨论】:

    标签: python function pandas for-loop dataframe


    【解决方案1】:

    需要replacedict:

    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
    

    【讨论】:

    • 谢谢。这对我来说效果很好。非常感谢。
    • 很高兴能帮上忙。如果我的回答有帮助,请不要忘记accept。谢谢。
    猜你喜欢
    • 2020-07-14
    • 2022-12-15
    • 1970-01-01
    • 2017-05-04
    • 2018-08-02
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    相关资源
    最近更新 更多