给定数据框
<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]
我希望有一个更好的方法来解决这个问题。
答案 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}}