gpt4 book ai didi

python - 优雅的方式将不同的常量值乘以 Pandas 中的不同列

转载 作者:行者123 更新时间:2023-12-02 01:24:55 26 4
gpt4 key购买 nike

目标是将某个常数值乘以 Pandas 中的列。每列都有自己的常量值。

例如,'a_b_c'、'dd_ee'、'ff_ff'、'abc'、'devb' 列分别乘以常数 15、20、15、15、20。

常量值及其关联的列存储在字典 const_val

const_val=dict(a_b_c=15,
dd_ee=20,
ff_ff=15,
abc=15,
devb=20,)

目前,我正在使用 for-loop 将每一列与其关联的常量值相乘,如下面的代码所示

for dpair in const_val:
df[('per_a',dpair)]=df[dpair]*const_val[dpair]/reval

但是,我想知道是否有更灵活的方法来做到这一点。

完整代码如下

import pandas as pd
import numpy as np
np.random.seed(0)

const_val=dict(a_b_c=15,
dd_ee=20,
ff_ff=15,
abc=15,
devb=20,)

df = pd.DataFrame(data=np.random.randint(5, size=(3, 6)),
columns=['id','a_b_c','dd_ee','ff_ff','abc','devb'])

reval=6

for dpair in const_val:
df[('per_a',dpair)]=df[dpair]*const_val[dpair]/reval

预期输出如下

   id  a_b_c  dd_ee  ...  (per_a, ff_ff)  (per_a, abc)  (per_a, devb)
0 4 0 3 ... 7.5 7.5 3.333333
1 3 2 4 ... 0.0 0.0 13.333333
2 2 1 0 ... 2.5 2.5 0.000000

请注意

(per_a, ff_ff)  (per_a, abc)  (per_a, devb)

是多索引列。该代表在您的编译器中可能不同

另外,我使用的是 IntelliJ IDEA

最佳答案

如果您的 DataFrame 中只有数字:

out = df.mul(pd.Series(const_val).reindex(df.columns, fill_value=1), axis=1)

如果您混合使用非数字和非数字:

out = df.select_dtypes('number').mul(pd.Series(const_val), axis=1).combine_first(df)

更新:

out = df.join(df[list(const_val)].mul(pd.Series(const_val), axis=1)
.div(reval).add_prefix('per_a_'))

输出

   id  a_b_c  dd_ee  ff_ff  abc  devb  per_a_a_b_c  per_a_dd_ee  per_a_ff_ff  per_a_abc  per_a_devb
0 1 4 3 0 3 0 10.0 10.000000 0.0 7.5 0.0
1 2 3 0 1 3 3 7.5 0.000000 2.5 7.5 10.0
2 3 0 1 1 1 0 0.0 3.333333 2.5 2.5 0.0

关于python - 优雅的方式将不同的常量值乘以 Pandas 中的不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74952504/

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