我有一个df
,
decimal_places amount
2 10
3 100
1 1000
我要基于以下计算来创建新列converted_amount
:
df = (df.assign(
converted_amount=lambda x: x.amount * 10 ** (2 - x.decimal_places.fillna(2, downcast='infer'))))
但是我遇到了以下错误,
ValueError: Integers to negative integer powers are not allowed.
我想知道如何解决这个问题,所以结果看起来像是
decimal_places amount converted_amount
2 10 10
3 100 10
1 1000 10000
答案 0 :(得分:3)
这里有两个问题。首先,如错误提示所示,值必须为浮点型。但是其次,通过设置downcast='infer'
,decimal_places
中的值将强制转换为整数,因为所有小数位均为0
,因此您将得到相同的错误。所以你想要:
df = df.astype(float)
df = (df.assign(
converted_amount=lambda x: x.amount * 10 ** (2 - x.decimal_places.fillna(2))))
对于更快的方法,您可以使用基础的numpy数组:
df['converted_amount'] = df.amount.values*(10**(2-df.decimal_places.fillna(2).values))
print(df)
decimal_places amount converted_amount
0 2.0 10.0 10.0
1 3.0 100.0 10.0
2 1.0 1000.0 10000.0