乘以每个部分确定的值

问题描述 投票:0回答:1

我面临的情况是,我需要将几列乘以与间隔对应的值。

我正在使用 Pandas,但我使用 for 循环来获取值,如下所示。

我认为有比这更好的方法,有人可以给我一些建议吗?

样品:

import pandas as pd

d = {
    1: -5,
    2: -4,
    3: 2,
    4: 7,
    5: 5,
}
def mul(value):
    for k, v in d.items():
        if value <= k:
            val = value * v
            break
    else: val = value * v
    return val

a = [
    {'a': 5, 'b': 2},
    {'a': 4, 'b': 0.5},
    {'a': 3.5, 'b': 1.5},
    {'a': 2.1, 'b': 5},
    {'a': 1, 'b': 1},
]

df = pd.DataFrame(a)
a = []
b = []
for i in df.values:
    a.append(mul(i[0]))
    b.append(mul(i[1]))
df['a1'] = a
df['b1'] = b
print(df.head())

"""
     a    b    a1    b1
0  5.0  2.0  25.0  -8.0
1  4.0  0.5  28.0  -2.5
2  3.5  1.5  24.5  -6.0
3  2.1  5.0   4.2  25.0
4  1.0  1.0  -5.0  -5.0
"""
pandas
1个回答
0
投票

代码

使用剪切

bins = [float('-inf')] + list(d.keys())

out = pd.concat([
    df,
    df.apply(lambda x: pd.cut(x, bins=bins, labels=d.values()))
      .astype('float')
      .mul(df)
      .add_suffix('1')
], axis=1)

输出:

     a    b    a1    b1
0  5.0  2.0  25.0  -8.0
1  4.0  0.5  28.0  -2.5
2  3.5  1.5  24.5  -6.0
3  2.1  5.0   4.2  25.0
4  1.0  1.0  -5.0  -5.0
© www.soinside.com 2019 - 2024. All rights reserved.