我有一个包含两列 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/