Skip to main content
 首页 » 编程设计

python之如何在大数据框中对组内的行进行排序

2025年05月04日31birdshome

我有一个相对较大的数据框 (1.5 Gb),我想按 ID 对行进行分组,并在每个组中按列 VAL 对行进行升序排序。

df = 
 
ID   VAL  COL 
1A   2    BB 
1A   1    AA 
2B   2    CC 
3C   3    SS 
3C   1    YY 
3C   2    XX  

这是预期的结果:

df = 
 
ID   VAL  COL 
1A   1    AA 
1A   2    BB 
2B   2    CC 
3C   1    YY 
3C   2    XX 
3C   3    SS 

这是我尝试过的,但它运行了很长时间。有没有更快的解决方案?:

df = df.groupby("ID").apply(pd.DataFrame.sort, 'VAL') 

请您参考如下方法:

如果你有一个很大的df并且速度很重要,试试一点numpy

# note order of VAL first, then ID is intentional 
# np.lexsort sorts by right most column first 
df.iloc[np.lexsort((df.VAL.values, df.ID.values))] 
 
   ID  VAL COL 
1  1A    1  AA 
0  1A    2  BB 
2  2B    2  CC 
4  3C    1  YY 
5  3C    2  XX 
3  3C    3  SS 

super 充电

v = df.values 
i, j = np.searchsorted(df.columns.values, ['VAL', 'ID']) 
s = np.lexsort((v[:, i], v[:, j])) 
pd.DataFrame(v[s], df.index[s], df.columns) 

时间