gpt4 book ai didi

python - 如何更快地获取基于 pandas Dataframe 给定值的列?

转载 作者:行者123 更新时间:2023-12-01 22:46:41 24 4
gpt4 key购买 nike

我有一个看起来像这样的 df:

<表类="s-表"><头>A列B列C列D列<正文>单元格 1单元格 6单元格 8单元格 4单元格 2单元格 7单元格 9南单元格 3南单元格 10南单元格 4南南南单元格 5南南南

我正在尝试构建一个函数,例如入口是 df 中的任何值,输出是该值所属的列。

我的想法是做类似的事情

df[df == val].stack().index[0][1]

它确实有效,但经过多次迭代后速度有点慢。如果你们知道任何其他更快的方法来获得相同的结果,那就太好了。

我正在使用的 df 并不比这个大多少。它的形状是 (21, 16),也许如果我像字典或其他东西一样存储它会更好。

请注意任何输入。

最佳答案

使用numpy.where对于行和列的索引,然后使用 nextiter 技巧过滤列名以获得第一个匹配值,如果不匹配的值获取自定义字符串 - 这里 不存在:

r, c = np.where(df.to_numpy() == val)

first_matched_col = next(iter(df.columns[c]), 'not exist')

在小数据样本中的比较——它比原始解决方案快 53 倍:

In [138]: %%timeit
...: df[df == val].stack().index[0][1]
...:
1.23 ms ± 88.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [139]: %%timeit
...: r, c = np.where(df == val)
...:
...: first_matched_col = next(iter(df.columns[c]), 'not exist')
...:
128 µs ± 23.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [140]: %%timeit
...: r, c = np.where(df.to_numpy() == val)
...:
...: first_matched_col = next(iter(df.columns[c]), 'not exist')
...:
...:
23.1 µs ± 1.39 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

对于匹配的所有匹配值使用join:

r, c = np.where(df.to_numpy() == val)
all_matched_col = ','.join(df.columns[c])

关于python - 如何更快地获取基于 pandas Dataframe 给定值的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75147800/

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