一种选择是使用
groupby
使用参数
sort=False
; 然后连接拆分的数据帧。
工作原理:
-
组
df
在破折号前按绳子
-
子句
默认情况下,按groupby键进行排序;当我们指定
sort=False
,我们确保密钥的存储顺序与第一次出现在中的顺序相同
df
,即“GUYPE”留在“SUPAU”后面。
-
子句
对象包含有关组的信息,可以像字典一样解包。然后解包并构建一个生成器表达式,返回分组的数据帧。
-
使用
concat
,将拆分的数据帧连接成一个;通过使用
ignore_index=True
,我们忽略来自拆分数据帧的索引,并重置索引。
out = pd.concat((d for _, d in df.groupby(df['SKU'].str.split('-').str[0], sort=False)), ignore_index=True)
输出:
SKU
0 FATUT
1 FATUT-01
2 FATUT-02
3 GUYGE
4 GUYGE-01
5 SUPAU
6 SUPAU-01
7 GUYPE
但我觉得为了你的任务,
sort_values
也可以工作,即使顺序与所需输出中的顺序不完全相同:
df = df.sort_values(by='SKU', ignore_index=True)
输出:
SKU
0 FATUT
1 FATUT-01
2 FATUT-02
3 GUYGE
4 GUYGE-01
5 GUYPE
6 SUPAU
7 SUPAU-01