【问题标题】: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 |