为了账号安全,请及时绑定邮箱和手机立即绑定

用熊猫的列条件更改特定行中的值

用熊猫的列条件更改特定行中的值

森栏 2021-04-12 12:13:18
我有一个df两列的数据框gender, score。|---------------------|------------------||      gender         |     score        ||---------------------|------------------||          male       |         34       ||---------------------|------------------||          female     |         34       ||---------------------|------------------||          male       |         34       ||---------------------|------------------||          female     |         34       ||---------------------|------------------||          male       |         34       ||---------------------|------------------|我想将男性(gender == 'male')的分数从第3行更改为第5行,以达到预期的输出:0|---------------------|------------------||      gender         |     score        ||---------------------|------------------||          male       |         34       ||---------------------|------------------||          female     |         34       ||---------------------|------------------||          male       |         0        ||---------------------|------------------||          female     |         34       ||---------------------|------------------||          male       |         0        ||---------------------|------------------|我iloc该如何结合这种状况?
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

Alt1:

您可以使用两个遮罩(条件)来完成此操作。这应该是可读且有意义的。


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

m2 = (df.gender.duplicated())


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

Alt2:

切掉非零掩码的第一个真值(需要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


查看完整回答
反对 回复 2021-04-27
?
HUX布斯

TA贡献1876条经验 获得超6个赞

我觉得你需要


m=df.loc[2:5,:].loc[df['gender']=='male']

df.loc[m.index,'score']=0

print(df)

    gender  score

0   male    34

1   female  34

2   male    0

3   female  34

4   male    0


查看完整回答
反对 回复 2021-04-27
  • 2 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信