gpt4 book ai didi

python - Pandas 中从列值创建排序列表的高效且最快的方法

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:04 25 4
gpt4 key购买 nike

给定一个数据框

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]

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

def blist(x):
col_dict = {}
for col in col_list:
col_dict[col] = x[col]
sorted_tuple = sorted(col_dict.items(), key=operator.itemgetter(1))
return [i[0] for i in sorted_tuple]

df['new_col'] = df.apply(blist,axis=1)

我会感谢有更好的方法来解决这个问题。

最佳答案

尝试使用np.argsort()连同np.take() :

In [132]: df['new_col'] = np.take(df.columns, np.argsort(df)).tolist()

In [133]: df
Out[133]:
A B C new_col
0 3 1 2 [B, C, A]
1 2 1 3 [B, A, C]
2 3 2 1 [C, B, A]

30.000 行 DF 的时间:

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)

比例:

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

关于python - Pandas 中从列值创建排序列表的高效且最快的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49439103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com