python – 使用pandas数据帧的.loc函数
发布时间:2020-12-20 11:53:33 所属栏目:Python 来源:网络整理
导读:我有一个pandas数据框,其中一列是: a = [1,1,3,4,6,6] 现在我想创建另一个列,这样任何大于0且小于5的值都被赋值为1而rest被赋值为0,即: a = [1,6]b = [1,0] 现在我已经这样做了 dtaframe['b'] = dtaframe['a'].loc[0 dtaframe['a'] 5] = 1dtaframe['b'] =
我有一个pandas数据框,其中一列是:
a = [1,1,3,4,6,6] 现在我想创建另一个列,这样任何大于0且小于5的值都被赋值为1而rest被赋值为0,即: a = [1,6] b = [1,0] 现在我已经这样做了 dtaframe['b'] = dtaframe['a'].loc[0 < dtaframe['a'] < 5] = 1 dtaframe['b'] = dtaframe['a'].loc[dtaframe['a'] >4 or dtaframe['a']==0] = 0 但代码抛出并出错.该怎么办 ? 解决方法
您可以使用
between 获取布尔值,然后使用astype将布尔值转换为0/1:
dtaframe['b'] = dtaframe['a'].between(0,5,inclusive=False).astype(int) 结果输出: a b 0 1 1 1 0 0 2 1 1 3 0 0 4 1 1 5 3 1 6 4 1 7 6 0 8 4 1 9 6 0 编辑 对于多个范围,您可以使用 dtaframe['b'] = pd.cut(dtaframe['a'],bins=[0,9],labels=False,include_lowest=True) 您需要注意如何定义垃圾箱.使用labels = False将返回每个bin的整数指示符,这恰好与您提供的标签相对应.您也可以手动指定每个bin的标签,例如labels = [0,2],labels = [0,17,19],labels = [‘a’,’b’,’c’]等.如果手动指定标签,可能需要使用astype,因为它们将作为类别返回. 或者,您可以组合loc和between来手动指定每个范围: dtaframe.loc[dtaframe['a'].between(0,1),'b'] = 0 dtaframe.loc[dtaframe['a'].between(2,6),'b'] = 1 dtaframe.loc[dtaframe['a'].between(7,9),'b'] = 2 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |