Pandas中的高效且最快的方法,可以从列值创建排序列表

时间:2018-03-22 21:55:48

标签: python pandas sorting numpy dataframe

给定数据框

     <EditText
                        android:id="@+id/editTextEnterAmount"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:hint="Enter Amount"

                        android:imeOptions="actionDone"

/>

我想获得一个新列,列名按排序顺序

A B C
3 1 2
2 1 3
3 2 1

这是我的代码。它有效,但速度很慢。

A B C new_col
3 1 2 [B,C,A]
2 1 3 [B,A,C]
3 2 1 [C,B,A]

我希望有一个更好的方法来解决这个问题。

1 个答案:

答案 0 :(得分:3)

尝试将np.argsort()np.take()结合使用:

In [182]: df = pd.concat([df] * 10**4, ignore_index=True)

In [183]: df.shape
Out[183]: (30000, 3)

In [184]: %timeit df.apply(blist,axis=1)
4.84 s ± 31 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [185]: %timeit np.take(df.columns, np.argsort(df)).tolist()
5.45 ms ± 26.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

30.000行的时间DF:

In [187]: (4.84*1000)/5.45
Out[187]: 888.0733944954128

比率:

{{1}}