gpt4 book ai didi

python-3.x - 如何 Pandas 对具有其中一列作为版本号的数据框进行排序?

转载 作者:行者123 更新时间:2023-12-04 08:50:41 24 4
gpt4 key购买 nike

我是 Python 的初学者。我正在尝试对 versions 上的数据框进行排序柱子 -print(df)

        versions         memory
0 10.0.0 107.07
1 10.0.0.1 110.11
2 10.0.2 110.56
3 10.0.4 116.27
4 10.1.0 116.17
5 10.1.2 113.98
6 10.1.4 113.27
7 10.2.0 103.32
8 9.9.2 112.02
9 9.9.2.3 112.28
10 9.9.4 114.45
11 9.9.4.1 114.32
这样得到的数据帧是 -
        versions         memory
0 9.9.2 112.02
1 9.9.2.3 112.28
2 9.9.4 114.45
3 9.9.4.1 114.32
4 10.0.0 107.07
5 10.0.0.1 110.11
6 10.0.2 110.56
7 10.0.4 116.27
8 10.1.0 116.17
9 10.1.2 113.98
10 10.1.4 113.27
11 10.2.0 103.32
versions 的数据类型列是 object .
我试着做 - df = df.sort_values('versions')但这会使数据框保持不变。
还尝试做 -
from distutils.version import StrictVersion
df = sorted(df['ghost_version'], key=StrictVersion)
但它在 ValueError: invalid version number '10.0.0.1' 上出错
有人可以指导吗?
谢谢

最佳答案

您可以创建由整数填充的元组,通过 Series.argsort 获取排序值的索引并通过 DataFrame.iloc 更改订单, 最后用于默认索引使用 DataFrame.reset_index :

df1 = (df.iloc[df['versions'].apply(lambda x: tuple(map(int, x.split(".")))).argsort()]
.reset_index(drop=True))
或者使用带有 DataFrame.sort_values 的辅助列最后删除列:
df['tmp'] = df['versions'].apply(lambda x: tuple(map(int, x.split("."))))
df1 = df.sort_values('tmp').drop('tmp', axis=1).reset_index(drop=True)

对于排序值的顺序也可以使用 LooseVersion :
from distutils.version import LooseVersion

df1 = df.iloc[df['versions'].apply(LooseVersion).argsort()].reset_index(drop=True)


versions memory
0 9.9.2 112.02
1 9.9.2.3 112.28
2 9.9.4 114.45
3 9.9.4.1 114.32
4 10.0.0 107.07
5 10.0.0.1 110.11
6 10.0.2 110.56
7 10.0.4 116.27
8 10.1.0 116.17
9 10.1.2 113.98
10 10.1.4 113.27
11 10.2.0 103.32

关于python-3.x - 如何 Pandas 对具有其中一列作为版本号的数据框进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64113271/

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