Python 3.x 基于条件更新熊猫中的列值

Python 3.x 基于条件更新熊猫中的列值,python-3.x,pandas,Python 3.x,Pandas,我需要根据这些条件更新列值 i. if score > 3, set score to 1. ii. if score <= 2, set score to 0. iii. if score == 3, drop that row. i。如果分数>3,则将分数设置为1。 二,。如果得分为3,“得分”]=1 reviews.loc[评论['Score']存在逻辑问题: reviews = pd.DataFrame({'Score':range(6)}) print (reviews)

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

i. if score > 3, set score to 1.
ii. if score <= 2, set score to 0.
iii. if score == 3, drop that row.
i。如果分数>3,则将分数设置为1。
二,。如果得分为3,“得分”]=1

reviews.loc[评论['Score']存在逻辑问题:

reviews = pd.DataFrame({'Score':range(6)})
print (reviews)
   Score
0      0
1      1
2      2
3      3
4      4
5      5
如果将所有值设置得更高,如
3
设置为
1
则工作正常:

reviews.loc[reviews['Score'] > 3, 'Score'] = 1
print (reviews)
   Score
0      0
1      1
2      2
3      3
4      1
5      1
然后,所有没有
3
的值都被设置为
0
,因此也被
reviews['Score']>3
中的
1
替换:

reviews.loc[reviews['Score'] <= 2, 'Score'] = 0
print (reviews)
   Score
0      0
1      0
2      0
3      3
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
中不等于
3
的所有行:

然后将值设置为
0
1

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
reviews.loc[reviews['Score']3,'Score']=1
评论.删除(评论[评论['Score']==3]。索引,原地=真)
印刷(评论)
分数
0      0
1      0
2      0
4      1
5      1

你的意思是
reviews=reviews[…].copy()
?此外,你的代码似乎与OP的代码相当,应该很好。我认为问题在于其他方面。@QuangHoang-谢谢,它似乎是正确的,但似乎只是编辑过的答案。解释性评论['Score']的回答很好。dtype=int32
reviews = reviews[reviews['Score'] != 3].copy()
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
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