代码之家  ›  专栏  ›  技术社区  ›  sato

使用熊猫替换基于条件的值

  •  1
  • sato  · 技术社区  · 7 年前

    我有一个类似的数据集:

    d = {
       'col1': [1,2,3,4,2,4,1,3,5,3,2,2,1,5], 
       'col2': [2,1,5,2,4,1,3,3,3,2,2,4,2,1]
    }
    df = pd.DataFrame(data=d)
    

    它是:

        col1    col2
    0   1       2
    1   2       1
    2   3       5
    3   4       2
    4   2       4
    5   4       1
    6   1       3
    7   3       3
    8   5       3
    9   3       2
    10  2       2
    11  2       4
    12  1       2
    13  5       1
    

    我只想“分类”一列单元格的内容,比如col2。例如,如果单元格的值是2、3或4,我想用值7替换它。我尝试了以下方法:

    for row in df.itertuples():
        if row.col2==2 or row.P28==3 or row.P28==4:
            df1.set_value(row, 'P28', 7)
    

    但是错误

    ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
    

    已返回。我不确定为什么会出现此错误,以及我应该如何使用任何建议的函数。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Deena    7 年前

    幸运的是,您不需要循环:

    mask = df['col2'].isin([2,3,4])  # Create a boolean mask of the condition
    df.loc[mask, 'col2'] = 7         # Replace values based on boolean mask
    
    df
    #     col1  col2
    # 0      1     7
    # 1      2     1
    # 2      3     5
    # 3      4     7
    # 4      2     7
    # 5      4     1
    # 6      1     7
    # 7      3     7
    # 8      5     7
    # 9      3     7
    # 10     2     7
    # 11     2     7
    # 12     1     7
    # 13     5     1
    
        2
  •  1
  •   Vaishali    7 年前

    可以使用字典替换

    d = dict.fromkeys([2,3,4], 7)
    df['col2'] = df.col2.replace(d)
    
        col1    col2
    0   1   7
    1   2   1
    2   3   5
    3   4   7
    4   2   7
    5   4   1
    6   1   7
    7   3   7
    8   5   7
    9   3   7
    10  2   7
    11  2   7
    12  1   7
    13  5   1