在Pandas DataFrame中应用IF条件的5种方法

2021年9月19日22:57:05 发表评论 6,814 次浏览
在本指南中,你将看到在 Pandas DataFrame中应用IF条件的5种不同方法。 具体来说,你将看到Pandas DataFrame应用IF条件的方法
  1. 一组数字
  2. 一组数字和 lambda
  3. 字符串
  4. 字符串和 Lambada
  5. 或条件

在 Pandas DataFrame中应用IF条件

现在让我们回顾以下 5 个案例:

(1) IF 条件 – 一组数字

Pandas DataFrame如何使用IF条件?假设你在 Python中创建了一个具有 10 个数字(从 1 到 10)的 DataFrame。然后,你要应用以下 IF 条件:
  • 如果数字等于或小于 4,则赋值为 'True'
  • 否则,如果数字大于4,则赋值为 'False'
这是你可以用来创建 IF 条件的一般结构:
df.loc[df['column name'] condition, 'new column name'] = 'value if condition is met'
对于我们的Pandas DataFrame IF条件用法示例,Python 代码如下所示:
import pandas as pd

numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])

df.loc[df['set_of_numbers'] <= 4, 'equal_or_lower_than_4?'] = 'True' 
df.loc[df['set_of_numbers'] > 4, 'equal_or_lower_than_4?'] = 'False' 

print (df)
这是你将在 Python 中得到的结果:
   set_of_numbers   equal_or_lower_than_4?
0               1                     True
1               2                     True
2               3                     True
3               4                     True
4               5                    False
5               6                    False
6               7                    False
7               8                    False
8               9                    False
9              10                    False

(2) IF 条件 – 一组数字和 lambda

你现在将看到如何通过使用Lambada获得与案例 1 相同的结果其中条件是:
  • 如果数字等于或小于 4,则赋值为 'True'
  • 否则,如果数字大于4,则赋值为 'False'
这是你可以在 Python 中应用的通用结构:
df['new column name'] = df['column name'].apply(lambda x: 'value if condition is met' if x condition else 'value if condition is not met')
对于我们的Pandas DataFrame IF条件用法示例
import pandas as pd

numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])

df['equal_or_lower_than_4?'] = df['set_of_numbers'].apply(lambda x: 'True' if x <= 4 else 'False')

print (df)
这是你将得到的结果,与案例 1 匹配:
   set_of_numbers   equal_or_lower_than_4?
0               1                     True
1               2                     True
2               3                     True
3               4                     True
4               5                    False
5               6                    False
6               7                    False
7               8                    False
8               9                    False
9              10                    False

(3) IF 条件——字符串

现在,让我们创建一个仅包含具有 4 个 名称的字符串/文本的 DataFrame :Jon、Bill、Maria 和 Emma。 条件是:
  • 如果名称等于'Bill',则分配值 'Match'
  • 否则,如果名称不是 'Bill',则分配值 'Mismatch'
import pandas as pd

names = {'first_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['first_name'])

df.loc[df['first_name'] == 'Bill', 'name_match'] = 'Match'  
df.loc[df['first_name'] != 'Bill', 'name_match'] = 'Mismatch'  
 
print (df)
运行上述 Python 代码后,你将看到:
  first_name   name_match
0        Jon     Mismatch
1       Bill        Match
2      Maria     Mismatch
3       Emma     Mismatch

(4) IF 条件——字符串和lambda 

Pandas DataFrame应用IF条件的方法:使用lambda,你将获得与情况 3 相同的结果
import pandas as pd

names = {'first_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['first_name'])

df['name_match'] = df['first_name'].apply(lambda x: 'Match' if x == 'Bill' else 'Mismatch')

print (df)
这是 Python 的输出:
  first_name   name_match
0        Jon     Mismatch
1       Bill        Match
2      Maria     Mismatch
3       Emma     Mismatch

(5) IF 条件与 OR

Pandas DataFrame如何使用IF条件?在最后一种情况下,让我们应用以下条件:
  • 如果名称是“Bill” “Emma”,则分配“Match”的值
  • 否则,如果名称既不是 'Bill' 也不是 'Emma',则赋值为 'Mismatch'
Pandas DataFrame IF条件用法示例如下:
import pandas as pd

names = {'first_name': ['Jon','Bill','Maria','Emma']}
df = pd.DataFrame(names,columns=['first_name'])

df.loc[(df['first_name'] == 'Bill') | (df['first_name'] == 'Emma'), 'name_match'] = 'Match'  
df.loc[(df['first_name'] != 'Bill') & (df['first_name'] != 'Emma'), 'name_match'] = 'Mismatch'  

print (df)
运行 Python 代码,你将得到以下结果:
  first_name   name_match
0        Jon     Mismatch
1       Bill        Match
2      Maria     Mismatch
3       Emma        Match

现有DataFrame 列下应用 IF 条件

到目前为止,你已经了解了如何通过创建新列来应用 IF 条件。 或者,你可以将结果存储在现有的DataFrame 列下。 Pandas DataFrame应用IF条件的方法:例如,假设你创建了一个包含 12 个数字的 DataFrame,其中最后两个数字为零: 'set_of_numbers': [1,2,3,4,5,6,7,8,9,10, 0 , 0 ] 然后,你可以应用以下 IF 条件,然后将结果存储在现有的“set_of_numbers”列下:
  • 如果数字等于 0,则将值更改为 999
  • 如果数字等于 5,则将值更改为 555
import pandas as pd

numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10,0,0]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])
print (df)

df.loc[df['set_of_numbers'] == 0, 'set_of_numbers'] = 999
df.loc[df['set_of_numbers'] == 5, 'set_of_numbers'] = 555

print (df)
以下是之前和之后的结果,在现有的“set_of_numbers”列下,“5”变为“555”,“0”变为“999”: 前:
    set_of_numbers
0                1
1                2
2                3
3                4
4                5
5                6
6                7
7                8
8                9
9               10
10               0
11               0
后:
    set_of_numbers
0                1
1                2
2                3
3                4
4              555
5                6
6                7
7                8
8                9
9               10
10             999
11             999
在另一个实例中,你可能有一个包含NaN 值的 DataFrame 。然后,你可以应用 IF 条件将这些值替换为 zeros,如下例所示:
import pandas as pd
import numpy as np

numbers = {'set_of_numbers': [1,2,3,4,5,6,7,8,9,10,np.nan,np.nan]}
df = pd.DataFrame(numbers,columns=['set_of_numbers'])
print (df)

df.loc[df['set_of_numbers'].isnull(), 'set_of_numbers'] = 0
print (df)
在你看到 NaN 值之前,以及在你看到零值之后: 前:
    set_of_numbers
0              1.0
1              2.0
2              3.0
3              4.0
4              5.0
5              6.0
6              7.0
7              8.0
8              9.0
9             10.0
10             NaN
11             NaN
后:
    set_of_numbers
0              1.0
1              2.0
2              3.0
3              4.0
4              5.0
5              6.0
6              7.0
7              8.0
8              9.0
9             10.0
10             0.0
11             0.0

结论

Pandas DataFrame如何使用IF条件?你刚刚看到了如何在Pandas DataFrame中应用IF条件。在 Python 中确实有多种方法可以应用这样的条件。你可以通过使用Lambada 或仅坚持使用 Pandas来获得相同的结果。 最后,它归结为使用最适合你需求的方法。 最后,你可能需要查看以下外部资源以获取有关Pandas DataFrame 的其他信息。
木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: