gpt4 book ai didi

python - 通过 DFs 列上的条件将权重列添加到 pandas DF

转载 作者:行者123 更新时间:2023-11-28 20:01:49 24 4
gpt4 key购买 nike

根据 dfs 列的条件向现有 Pandas DataFrame "df" 添加一列(权重)的最 pythonic 方法是什么?

小例子:

df = pd.DataFrame({'A' : [1, 2, 3], 'B' : [4, 5, 6]})
df
Out[110]:
A B
0 1 4
1 2 5
2 3 6

我想添加一个“权重”列,如果 df['B'] >= 6 那么 df['weight'] = 20,否则, df['权重'] = 1

所以我的输出将是:

   A  B  weight
0 1 4 1
1 2 5 1
2 3 6 20

最佳答案

方法 #1

这是一个带有类型转换和缩放的 -

df['weight'] = (df['B'] >= 6)*19+1

方法 #2

另一种使用底层数组数据可能更快的方法 -

df['weight'] = (df['B'].values >= 6)*19+1

方法 #3

利用 numexpr module 的多核-

import numexpr as ne

val = df['B'].values
df['weight'] = ne.evaluate('(val >= 6)*19+1')

500k 行的计时 as commented by OP对于 [0,9) 范围内的随机数据,对于迄今为止发布的矢量化方法 -

In [149]: np.random.seed(0)
...: df = pd.DataFrame({'B' : np.random.randint(0,9,(500000))})

# @jpp's soln
In [150]: %timeit df['weight1'] = np.where(df['B'] >= 6, 20, 1)
100 loops, best of 3: 3.57 ms per loop

# @jpp's soln with array data
In [151]: %timeit df['weight2'] = np.where(df['B'].values >= 6, 20, 1)
100 loops, best of 3: 3.27 ms per loop

In [154]: %timeit df['weight3'] = (df['B'] >= 6)*19+1
100 loops, best of 3: 2.73 ms per loop

In [155]: %timeit df['weight4'] = (df['B'].values >= 6)*19+1
1000 loops, best of 3: 1.76 ms per loop

In [156]: %%timeit
...: val = df['B'].values
...: df['weight5'] = ne.evaluate('(val >= 6)*19+1')
1000 loops, best of 3: 1.14 ms per loop

最后一个...

随着输出为 120,我们可以安全地使用较低的精度:uint8 来实现已经讨论过的涡轮加速,比如所以-

In [208]: %timeit df['weight6'] = (df['B'].values >= 6)*np.uint8(19)+1
1000 loops, best of 3: 428 µs per loop

关于python - 通过 DFs 列上的条件将权重列添加到 pandas DF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49977723/

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