python - 使用 pandas 中的列条件更改特定行中的值

标签 python pandas

我有一个包含两列 gender, score 的数据框 df

|---------------------|------------------|
|      gender         |     score        |
|---------------------|------------------|
|          male       |         34       |
|---------------------|------------------|
|          female     |         34       |
|---------------------|------------------|
|          male       |         34       |
|---------------------|------------------|
|          female     |         34       |
|---------------------|------------------|
|          male       |         34       |
|---------------------|------------------|

我想将第 3 行到第 5 行的男性(gender == 'male')分数更改为 0,预期输出:

|---------------------|------------------|
|      gender         |     score        |
|---------------------|------------------|
|          male       |         34       |
|---------------------|------------------|
|          female     |         34       |
|---------------------|------------------|
|          male       |         0        |
|---------------------|------------------|
|          female     |         34       |
|---------------------|------------------|
|          male       |         0        |
|---------------------|------------------|

如何将 iloc 与该条件相结合?

最佳答案

备选方案 1:

你可以用两个掩码(条件)来完成。这应该是可读的并且有意义。

m1 = (df.gender == 'male')
m2 = (df.gender.duplicated())

df.loc[m1&m2, 'score'] = 0

备选方案 2:

切掉非零掩码的第一个真值(需要import numpy as np)。这应该会更快。

m = np.nonzero(df.gender=='male')[0][1:]
df.loc[m, 'score'] = 0

完整示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'gender': ['male','female','male','female','male'],
    'score': 34
})

m1 = (df.gender == 'male')
m2 = (df.gender.duplicated())

m = np.nonzero(df.gender=='male')[0][1:]
df.loc[m, 'score'] = 0

print(df)

返回:

   gender  score
0    male     34
1  female     34
2    male      0
3  female     34
4    male      0

关于python - 使用 pandas 中的列条件更改特定行中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51235924/

相关文章:

python - 将大列表保存在内存中的替代方法(python)

Python 3 读取行内缺少对象的 json 文件

python - pandas read_csv 和使用 usecols 过滤列

python - df.duplicated() 误报?

python - 如何在数据框中最后一次出现字符后删除所有内容?

python - 自定义 python 数据库记录器,具有循环导入

python - 如何修复我的 pandas 数据框中的索引,使其不只将值保持为零,而是增加值?

python - 根据 pandas 列中值的最后一个字符从 DataFrame 中选择行

python - 使用 keras、tensorflow 和 python 编写这种异国情调的神经网络架构

python - 在机器学习中使用三种不同的标签