如何在Pandas分组(groupby)后对DataFrame的Version列排序
问题
给定如下Pandas DataFrame:
Fruit Color Version Apple Green 1.1 Lemon Green 1.4a Lemon Yellow 5 Banana Black 6.8.a Banana Yellow 6.8.a Lemon Blue 6.7.a
需要按Color列分组,对每组内的Version列进行降序排序,期望输出:
Fruit Color Version Lemon Green 1.4a Apple Green 1.1 Banana Yellow 6.8.a Lemon Yellow 5 Banana Black 6.8.a Lemon Blue 6.7.a
已尝试使用LooseVersion进行版本排序,但无法结合groupby实现组内排序。
解决方案
利用groupby的apply方法,在每组内基于LooseVersion对Version列排序,具体实现如下:
- 导入依赖库:
import pandas as pd from distutils.version import LooseVersion
- 构造示例数据(若已有DataFrame可跳过此步):
df = pd.DataFrame({ 'Fruit': ['Apple', 'Lemon', 'Lemon', 'Banana', 'Banana', 'Lemon'], 'Color': ['Green', 'Green', 'Yellow', 'Black', 'Yellow', 'Blue'], 'Version': ['1.1', '1.4a', '5', '6.8.a', '6.8.a', '6.7.a'] })
- 执行组内排序:
通过groupby('Color')分组后,对每组应用排序逻辑,以LooseVersion转换后的Version作为排序键,降序排列:
sorted_df = df.groupby('Color', group_keys=False).apply( lambda group: group.sort_values( by='Version', key=lambda x: x.apply(LooseVersion), ascending=False ) )
- 重置索引(可选,用于生成连续索引):
sorted_df = sorted_df.reset_index(drop=True)
运行上述代码后,即可得到符合需求的排序结果。
内容的提问来源于stack exchange,提问作者Cheburashka
相关产品推荐
相关产品推荐

