我面临的情况是,我需要将几列乘以与间隔对应的值。
我正在使用 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
"""
代码
使用剪切
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