如何使用 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
我想用 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 |