看到@JohnGait和@MaxU提出的方法,我进行了一个小速度比较。
arr = np.random.randint(low = 100, size = (10000000, 2))
df = pd.DataFrame(arr, columns = ['a', 'b'])
t_0 = time.time()
df.a, df.b = np.where(df.a > df.b, [df.b, df.a], [df.a, df.b])
t_1 = time.time()
df = pd.DataFrame(arr, columns = ['a', 'b'])
t_2 = time.time()
cond = df.a > df.b
df.loc[cond, ['a', 'b']] = df.loc[cond, ['b', 'a']].values
t_3 = time.time()
df = pd.DataFrame(arr, columns = ['a', 'b'])
t_4 = time.time()
df['a'], df['b'] = df.min(axis=1), df.max(axis=1)
t_5 = time.time()
t_6 = time.time()
df_ = pd.DataFrame(np.sort(arr, axis=1), df.index, df.columns)
t_7 = time.time()
t_1 - t_0
t_3 - t_2
t_5 - t_4
t_7 - t_6
尽管第二种方法是最快的方法,但实际上获得的收益微不足道。我因为追求完美而添加了它。我没有包括排序方法,因为我相信那会慢得多。
编辑:
我之前错误地报告了 np.where 的计算时间,由于我的错误。已经更正了(结果发现它是最慢的!),并添加了另一种方法(遵循@MaxU的评论)。
pd.DataFrame(np.sort(d.values, axis=1), d.index, d.columns)
添加时间? - MaxU - stand with Ukraine