我有一个相对较大的数据框(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




超级充电

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)


定时

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

关于python - 如何对大数据框中的组内的行进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41306217/

10-10 15:35