加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

编辑

对于多个范围,您可以使用pandas.cut

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读