gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:00 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com