gpt4 book ai didi

python-3.x - 根据条件更新 Pandas 中的列值

转载 作者:行者123 更新时间:2023-12-04 09:57:38 24 4
gpt4 key购买 nike

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

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

Score 的值介于 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,因此 reviews['Score'] 中的 1 也被替换 > 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 的行删除了 3 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

关于python-3.x - 根据条件更新 Pandas 中的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61891359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com