【问题标题】:Python pandas how to update a column with value 1 if another column contains a certain word如果另一列包含某个单词,Python pandas 如何更新值为 1 的列
【发布时间】:2023-02-11 05:13:46
【问题描述】:

df 看起来像这样:

description and keybenefits (14) brand_cooltouch (1711) brand_easylogic (1712)
Lorem Ipsum cooltouch Lorem Ipsum
Lorem Ipsum easylogic Lorem Ipsum
Lorem Ipsum Lorem Ipsum

我想要的是:

  • 当列 description 和 keybenefits (14) 包含值“cooltouch”时,列 brand_cooltouch (1711) 需要设置为值 1 (int)。
  • 当列 description 和 keybenefits (14) 包含值“easylogic”时,列 brand_easylogic (1712) 需要设置为值 1 (int)。

我想要的输出:

description and keybenefits (14) brand_cooltouch (1711) brand_easylogic (1712)
Lorem Ipsum cooltouch Lorem Ipsum 1
Lorem Ipsum Lorem Ipsum easylogic 1
Lorem Ipsum Lorem Ipsum

很感谢任何形式的帮助。

【问题讨论】:

    标签: python pandas replace contains


    【解决方案1】:

    可以使用pandas.Series.str.contains

    对于字符串 cooltouch 执行以下操作

    df['brand_cooltouch (1711)'] = df['description and keybenefits (14)'].str.contains('cooltouch', case=False).astype(int)
    
    [Out]:
    
        description and keybenefits (14)  brand_cooltouch (1711)  brand_easylogic (1712)
    0  Lorem Ipsum cooltouch Lorem Ipsum                       1                     None
    1  Lorem Ipsum easylogic Lorem Ipsum                       0                     None
    2            Lorem Ipsum Lorem Ipsum                       0                     None
    

    对于字符串easylogic,执行以下操作

    df['brand_easylogic (1712)'] = df['description and keybenefits (14)'].str.contains('easylogic', case=False).astype(int)
    
    [Out]:
    
        description and keybenefits (14)  brand_cooltouch (1711)  brand_easylogic (1712)
    0  Lorem Ipsum cooltouch Lorem Ipsum                       1                     0
    1  Lorem Ipsum easylogic Lorem Ipsum                       0                     1
    2            Lorem Ipsum Lorem Ipsum                       0                     0
    

    笔记:

    • case=False 是让它不区分大小写。

    【讨论】:

    • @Isabella 不明白您的目标...如果目标是用0 替换None,则可能需要check this
    • 或者,如果那不能回答您的问题,并且假设它尚不存在,我建议您提出一个新问题。您很可能会从社区获得所需的帮助。
    【解决方案2】:

    你可以使用 np.where。我建议用 NaN 或 0 填充所有不满足条件的单元格。这是使用np.nan 的解决方案

    df["brand_cooltouch (1711)“] = np.where(df["description and keybenefits (14)“].str.contains("cooltouch"), 1, np.nan)
    df["brand_easylogic (1712)“] = np.where(df["description and keybenefits (14)“].str.contains("easylogic"), 1, np.nan)
    

    【讨论】:

      【解决方案3】:

      使用Series.str.contains-

      df['brand_cooltouch (1711)'] = df['description and keybenefits (14)'].str.contains("cooltouch").astype(int)
      

      输出

          description and keybenefits (14)  brand_cooltouch (1711)  brand_easylogic (1712)
      0  Lorem Ipsum cooltouch Lorem Ipsum                       1                     NaN
      1  Lorem Ipsum easylogic Lorem Ipsum                       0                     NaN
      2            Lorem Ipsum Lorem Ipsum                       0                     NaN
      

      如果您不希望结果列为 1 和 0 - 您也可以这样做 -

      df.loc[df['description and keybenefits (14)'].str.contains("cooltouch"), ['brand_cooltouch (1711)']] = '1'
      df.loc[~df['description and keybenefits (14)'].str.contains("cooltouch"), ['brand_cooltouch (1711)']] = ''
      

      输出

          description and keybenefits (14) brand_cooltouch (1711)  brand_easylogic (1712)
      0  Lorem Ipsum cooltouch Lorem Ipsum                      1                     NaN
      1  Lorem Ipsum easylogic Lorem Ipsum                                            NaN
      2            Lorem Ipsum Lorem Ipsum                                            NaN
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-13
        • 2021-08-28
        相关资源
        最近更新 更多