gpt4 book ai didi

python - Pandas - sort_values 未正确排序转换后的浮点百分比

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

我正在处理一个数据框,我想在其中显示某些值的百分比。我将它们计算为十进制值,然后应用格式字符串将它们转换为百分比。当数据框转换为百分比时,它无法正确地对百分比进行排序。

d = {'name': ['A', 'B', 'C', 'D', 'E'], 'percentage':[0.15, 0.65, 0.7, 0.3, 1]}
test_df = pd.DataFrame(data = d)
test_df

name percentage
0 A 0.15
1 B 0.65
2 C 0.70
3 D 0.30
4 E 1.00
使用 sort_values 函数对上述值进行排序时,我们收到:
test_df.sort_values('percentage')

name percentage
0 A 0.15
3 D 0.30
1 B 0.65
2 C 0.70
4 E 1.00
然后我将小数转换为百分比(这主要用于图表中的可视化目的)并尝试对其进行排序,这次升序,因为我的数据集有几百行,我只想显示前 10 行:
perc_sort = test_df
perc_sort['percentage'] = perc_sort['percentage'].astype(float).map("{:.2%}".format)
perc_sort.sort_values('percentage', ascending=False)

name percentage
2 C 70.00%
1 B 65.00%
3 D 30.00%
0 A 15.00%
4 E 100.00%
为什么 100% 在底部?我猜字符串有问题,可能是 0 出现在数字 1 之前。但是有没有办法对实际百分比进行排序?

最佳答案

您需要对整数进行排序,否则数字排序错误 - '100' < 5 , 因为 '1' < '5' :

perc_sort.sort_values('percentage', ascending=False)
perc_sort['percentage'] = perc_sort['percentage'].astype(float).map("{:.2%}".format)
如果值已经是字符串,您可以创建由数字填充并按其排序的辅助列:
perc_sort = test_df.copy()
perc_sort['percentage'] = perc_sort['percentage'].astype(float).map("{:.2%}".format)
perc_sort['new'] = perc_sort['percentage'].str.strip('%').astype(float)
df = perc_sort.sort_values('new', ascending=False)

print(df)
name percentage new
4 E 100.00% 100.0
2 C 70.00% 70.0
1 B 65.00% 65.0
3 D 30.00% 30.0
0 A 15.00% 15.0
或使用 Series.argsort [::-1]用于降序排序值的索引并传递给 DataFrame.iloc :
new = perc_sort['percentage'].str.strip('%').astype(float)
df = perc_sort.iloc[new.argsort()[::-1]]

print(df)
name percentage
4 E 100.00%
2 C 70.00%
1 B 65.00%
3 D 30.00%
0 A 15.00%

关于python - Pandas - sort_values 未正确排序转换后的浮点百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64385933/

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