如何在Pandas中根据条件替换列中的值(附实例)

952 阅读3分钟

你可以使用下面的基本语法来根据一个条件替换pandas DataFrame中某一列的值:

#replace values in 'column1' that are greater than 10 with 20
df.loc[df['column1'] > 10, 'column1'] = 20

下面的例子展示了如何在实践中使用这种语法。

例1:基于一个条件替换列中的值

假设我们有下面这个pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   'position': ['G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'],
                   'points': [5, 7, 7, 9, 12, 13, 9, 14],
                   'assists': [3, 8, 2, 6, 6, 5, 9, 5]})

#view DataFrame
df

	team	position points	assists
0	A	G	 5	3
1	A	G	 7	8
2	A	F	 7	2
3	A	F	 9	6
4	B	G	 12	6
5	B	G	 13	5
6	B	F	 9	9
7	B	F	 14	5       

我们可以用下面的代码将'points'列中大于10的每个值替换为20的值:

#replace any values in 'points' column greater than 10 with 20
df.loc[df['points'] > 10, 'points'] = 20

#view updated DataFrame
df

	team	position points	assists
0	A	G	 5	3
1	A	G	 7	8
2	A	F	 7	2
3	A	F	 9	6
4	B	G	 20	6
5	B	G	 20	5
6	B	F	 9	9
7	B	F	 20	5

请注意,"积分 "列中大于10的三个值都被替换成了20。

例2:基于多个条件替换列中的值

假设我们有下面这个pandas数据框架:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   'position': ['G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'],
                   'points': [5, 7, 7, 9, 12, 13, 9, 14],
                   'assists': [3, 8, 2, 6, 6, 5, 9, 5]})

#view DataFrame
df

	team	position points	assists
0	A	G	 5	3
1	A	G	 7	8
2	A	F	 7	2
3	A	F	 9	6
4	B	G	 12	6
5	B	G	 13	5
6	B	F	 9	9
7	B	F	 14	5       

我们可以使用下面的代码来替换'position'列中积分小于10助攻小于5的每一个值,用字符串'Bad'替换:

#replace string in 'position' column with 'bad' if points < 10 or assists < 5
df.loc[(df['points'] < 10) | (df['assists'] < 5), 'position'] = 'Bad'

#view updated DataFrame
df

        team	position points	assists
0	A	Bad	 5	3
1	A	Bad	 7	8
2	A	Bad	 7	2
3	A	Bad	 9	6
4	B	G	 20	6
5	B	G	 20	5
6	B	Bad	 9	9
7	B	F	 20	5

同样地,我们可以使用下面的代码将 "位置 "列中积分小于10 助攻小于5的每个值替换为字符串 "坏":

#replace string in 'position' column with 'bad' if points < 10 and assists < 5
df.loc[(df['points'] < 10) & (df['assists'] < 5), 'position'] = 'Bad'

#view updated DataFrame
df

        team	position points	assists
0	A	Bad	 5	3
1	A	G	 7	8
2	A	Bad	 7	2
3	A	F	 9	6
4	B	G	 12	6
5	B	G	 13	5
6	B	F	 9	9
7	B	F	 14	5

请注意,得分小于10助攻小于5的两行的 "位置 "值被替换成了字符串 "坏"。

其他资源

下面的教程解释了如何在pandas中执行其他常见操作:

如何在Pandas中通过多个条件选择行
如何在Pandas中根据一个条件创建一个新的列
如何根据多个条件过滤Pandas数据框