Python 在一个数据帧中,我想根据过滤其他列到特定值来为列分配一个值
例如,我想将“ModelPrediction”列中的所有值更改为1,其中“AgeGrp”列等于[0,5],其中“Sex”列等于male,“PClass”列等于“1”和“2” 我已经将AgeGrp、Pclass列的数据类型更改为object 我的尝试如下:Python 在一个数据帧中,我想根据过滤其他列到特定值来为列分配一个值,python,pandas,Python,Pandas,例如,我想将“ModelPrediction”列中的所有值更改为1,其中“AgeGrp”列等于[0,5],其中“Sex”列等于male,“PClass”列等于“1”和“2” 我已经将AgeGrp、Pclass列的数据类型更改为object 我的尝试如下: train.loc[train['Sex'] == 'male' & ['Pclass'] == 1 & ['Pclass'] == 2 & ['AgeGrp'] == (0, 5], 'ModelPrediction
train.loc[train['Sex'] == 'male' & ['Pclass'] == 1 & ['Pclass'] == 2 & ['AgeGrp'] == (0, 5], 'ModelPrediction'] = 1
我对蟒蛇/熊猫的一切都很陌生,非常感谢您的帮助!!谢谢大家! 我认为您需要添加
()
,并且Pclass
还有两个条件,我认为如果需要检查这两个值,则需要在此处添加:
train = pd.DataFrame({'Sex':['male','female','male'],
'Pclass':[1,0,1],
'AgeGrp':[pd.Interval(0, 5, closed='right'),
pd.Interval(6, 10, closed='right'),
pd.Interval(0, 5, closed='right')],
'ModelPrediction':[0,1,0]})
print (train)
Sex Pclass AgeGrp ModelPrediction
0 male 1 (0, 5] 0
1 female 0 (6, 10] 1
2 male 1 (0, 5] 0
train.loc[(train['Sex'] == 'male') &
(train['Pclass'].isin([1, 2])) &
(train['AgeGrp'] == pd.Interval(0, 5, closed='right')), 'ModelPrediction'] = 1
print (train)
Sex Pclass AgeGrp ModelPrediction
0 male 1 (0, 5] 1
1 female 0 (6, 10] 1
2 male 1 (0, 5] 1
很接近,但有一个条件,
Pclass
同时为1和2,这是不可能的,间隔的语法不存在,您需要用括号分隔每个条件:
train.loc[(train['Sex'] == 'male') & ((train['Pclass'] == 1) | (train['Pclass'] == 2)) & (train['AgeGrp'] > 0) & (train['AgeGrp'] <= 5), 'ModelPrediction'] = 1
train.loc[(train['Sex']='male')&((train['Pclass']==1)|(train['Pclass']==2))&(train['AgeGrp']>0)和(train['AgeGrp']是的,我不是说没有使用间隔的方法;只是没有内置的Python/pandas语法,OP想要做的事情需要更多的工作。是的,那么同意:)