在pandas列内映射值

我使用下面的代码将S列中的2个值映射为0,但是它不起作用。关于如何解决这个问题的任何建议?注意:我想在地图内部实现一个外部函数。


 df = pd.DataFrame({

   'Age': [30,40,50,60,70,80],

   'Sex': ['F','M','M','F','M','F'],

   'S'  : [1,1,2,2,1,2]

 })

 def app(value):

     for n in df['S']:

         if n == 1:

             return 1

         if n == 2:

             return 0

 df["S"] = df.S.map(app)


慕神8447489
浏览 169回答 3
3回答

Smart猫小萌

使用eq创建布尔系列和CONVER那布尔系列INT有astype:df['S'] = df['S'].eq(1).astype(int)或者df['S'] = (df['S'] == 1).astype(int)输出:   Age Sex  S0   30   F  11   40   M  12   50   M  03   60   F  04   70   M  15   80   F  0

慕婉清6462132

不要使用apply,只需使用loc即可分配值:df.loc[df.S.eq(2), 'S'] = 0   Age Sex  S0   30   F  11   40   M  12   50   M  03   60   F  04   70   M  15   80   F  0如果您需要性能更高的选项,请使用np.select。这也更具可伸缩性,因为您可以随时添加更多条件:df['S'] = np.select([df.S.eq(2)], [0], 1)

桃花长相依

您已接近,但需要进行一些更正。由于要使用函数,因此请删除for循环并替换n为value。此外,请使用apply代替map。Apply一次对整个列进行操作。有关如何正确使用vs vs的信息,请参见此答案applyapplymapmapdef app(value):    if value == 1:        return 1    elif value == 2:        return 0df['S'] = df.S.apply(app)   Age Sex  S0   30   F  11   40   M  12   50   M  03   60   F  04   70   M  15   80   F  0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python