根据条件更新熊猫中的列值

萨蒂扬·阿南德

我需要根据这些条件更新列值

i. if score > 3, set score to 1.
ii. if score <= 2, set score to 0.
iii. if score == 3, drop that row.

分数介于1到5之间

我已经编写了以下代码,但是所有值都被更改为0。

reviews.loc[reviews['Score'] > 3, 'Score'] = 1
reviews.loc[reviews['Score'] <= 2, 'Score'] = 0
reviews.drop(reviews[reviews['Score'] == 3].index, inplace = True)

请指出这是在做的错误。

耶斯列尔

存在逻辑问题:

reviews = pd.DataFrame({'Score':range(6)})
print (reviews)
   Score
0      0
1      1
2      2
3      3
4      4
5      5

如果将所有值都设置得较高31则需要:

reviews.loc[reviews['Score'] > 3, 'Score'] = 1
print (reviews)
   Score
0      0
1      1
2      2
3      3
4      1
5      1

然后将所有没有3的值设置为0,因此也1从中替换reviews['Score'] > 3

reviews.loc[reviews['Score'] <= 2, 'Score'] = 0
print (reviews)
   Score
0      0
1      0
2      0
3      3
4      0
5      0

最后是已删除的3行,仅获0取值:

reviews.drop(reviews[reviews['Score'] == 3].index, inplace = True)
print (reviews)
   Score
0      0
1      0
2      0
4      0
5      0

您可以更改解决方案:

reviews = pd.DataFrame({'Score':range(6)})
print (reviews)
   Score
0      0
1      1
2      2
3      3
4      4
5      5

首先3通过过滤器删除不等于3in的所有行boolean indexing

reviews = reviews[reviews['Score'] != 3].copy()

然后将值设置为01

reviews['Score'] = (reviews['Score'] > 3).astype(int)
#alternative
reviews['Score'] = np.where(reviews['Score'] > 3, 1, 0)
print (reviews)
   Score
0      0
1      0
2      0
4      1
5      1

编辑1:

您的解决方案应使用交换线进行更改-首先设置交换线0,然后1为避免覆盖值:

reviews.loc[reviews['Score'] <= 2, 'Score'] = 0
reviews.loc[reviews['Score'] > 3, 'Score'] = 1

reviews.drop(reviews[reviews['Score'] == 3].index, inplace = True)
print (reviews)
   Score
0      0
1      0
2      0
4      1
5      1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章