如何使用 If 条件修改数据框中的变量?

How can I modify a variable in a dataframe using a If condition?

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

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

如果 Flag_Name = 1 则我必须用 New_Name 列的内容替换名称列,如果 Flag_Name = 0 则保留名称列。

感谢您的帮助

尝试 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'])

也可以使用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

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

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

你可以做到这一点的方法之一是列表理解。

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