gpt4 book ai didi

python pandas按值计数重新标记值

转载 作者:行者123 更新时间:2023-12-03 23:43:55 25 4
gpt4 key购买 nike

给出以下示例:

example = pd.DataFrame({'y':[1,1,1,1,1,1,1,1,1,1,2,2,2,2,0,0,-1,-1,-1]})
我想按频率计数以降序重新标记这些值。因此,我希望将案例数最多的值(例如 1)替换为 0,然后将下一个最大的 bin 替换为 1,依此类推所有值。需要注意的是,我想忽略值为 -1 的情况。如果我运行 value_counts() ,我可以看到这个:
y 
1 10
2 4
-1 3
0 2
dtype: int64
但我想要一个 pythonic 和非 hacky/clean 解决方案来创建以下内容:
    y
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 1
11 1
12 1
13 1
14 2
15 2
16 -1
17 -1
18 -1

y
0 10
1 4
-1 3
2 2
dtype: int64
(理想情况下,我也保留旧列以保持良好的记录)。我可以遍历每个值,检查它是否不是 -1,然后 value_counts()并用迭代次数替换它,但这种感觉维护性相当高。有没有干净的方法来实现它?

最佳答案

使用 Series.map 由索引创建的字典来自 Series之后 Series.value_counts 没有 -1 :

s = example['y'].value_counts().drop(-1)
d = {v:k for k, v in dict(enumerate(s.index)).items()}
或者:
s = example['y'].value_counts().drop(-1)
d = dict(zip(s.index, range(len(s))))
m = example['y'].ne(-1)
example.loc[m, 'y'] = example.loc[m, 'y'].map(d)
print (example)
y
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 1
11 1
12 1
13 1
14 2
15 2
16 -1
17 -1
18 -1
另一个想法是添加 -1带值 -1dictionary :
s = example['y'].value_counts().drop(-1)
d = {**{-1:-1}, **dict(zip(s.index, range(len(s))))}

example['y'] = example['y'].map(d)

关于python pandas按值计数重新标记值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64075318/

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