【问题标题】:How can I modify a variable in a dataframe using a If condition?如何使用 If 条件修改数据框中的变量?
【发布时间】:2021-12-01 22:16:13
【问题描述】:

我想使用 IF 条件替换一些变量。 例如,我有这个数据框:

Name New_Name Flag_Name
NK Nike 1
ADD Adidas 1
Microsoft Microsoft 0
APP Apple 1

如果 Flag_Name = 1 则我必须将 Name 列替换为 New_Name 列的内容,如果 Flag_Name = 0 则保留 Name 列的内容。

感谢您的帮助

【问题讨论】:

    标签: python pandas if-statement conditional-statements


    【解决方案1】:

    试试loc:

    df.loc[df['Flag_Name'] == 1, 'Name'] = df['New_Name']
    

    或者带着面具:

    m = df['Flag_Name'] == 1
    df.loc[m, 'Name'] = df.loc[m, 'New_Name']
    

    df['Name'].where:

    df['Name'] = df['Name'].where(df['Flag_Name'] == 1, df['New_Name'])
    

    【讨论】:

      【解决方案2】:

      也可以使用np.where:

      df['Name'] = np.where(df['Flag_Name'] == 1, df['New_Name'], df['Name'])
      

      输出:

              Name   New_Name  Flag_Name
      0       Nike       Nike          1
      1     Adidas     Adidas          1
      2  Microsoft  Microsoft          0
      3      Apple      Apple          1
      

      【讨论】:

        【解决方案3】:

        您还可以尝试一个函数并使用多个条件。

        首先,最好将列名小写并清理它,假设其中可能有空格,那么您可以避免错误。

        其中一种方法是使用列表推导式。

        cols =[col.strip().lower() for col in df.columns]
        df.columns = cols
        

        输出

        name new_name flag_name
        NK Nike 1
        ADD Adidas 1
        Microsoft Microsoft 0
        APP Apple 1

        好的!现在让我们处理替换。为此,让我们创建一个遍历 Dataframe 的函数。

        def correctname(df,col): #we need to pass the Dataframe name and the column to check
             for i, row in df.iterrows():
                 conditional =row[col] #here we have the value to check
                 if conditional == 1:
                 df.iloc[i,0]=df.iloc[i,1]# the 0 and 1 are the index columns 'name' and 'new_name'
        
        correctname(df,'flag_name')
        
        df
        

        输出

        name new_name flag_name
        Nike Nike 1
        Adidas Adidas 1
        Microsoft Microsoft 0
        Apple Apple 1

        【讨论】:

          猜你喜欢
          • 2023-03-08
          • 2017-06-26
          • 2022-12-12
          • 2021-08-20
          • 1970-01-01
          • 2020-11-02
          • 2020-04-29
          • 1970-01-01
          • 2019-09-10
          相关资源
          最近更新 更多