问题描述
以下代码必须执行一些步骤:
- 如果“批发数据”列的使用率大于等于“ mbs”列
- 减去“批发数据”列-“ mbs”
根据下表乘以差异
- 32-0.56
- 64-0.5
- 128-0.4
- 256-0.4
- 512-0.3
- 1024-0.3
- 对于所有其他可能的选项-0
我有以下代码
if df['Wholesale Data Usage'] >= df['mbs']:
if df['mbs'] == "32":
df['Additional Charge'] = (df['Wholesale Data Usage'] - df[
'mbs']) * 0.5
elif df['mbs'] == "64":
df['Additional Charge'] = (df['Wholesale Data Usage'] - df[
'mbs']) * 0.5
elif df['mbs'] == "128":
df['Additional Charge'] = (df['Wholesale Data Usage'] - df[
'mbs']) * 0.4
elif df['mbs'] == "256":
df['Additional Charge'] = (df['Wholesale Data Usage'] - df[
'mbs']) * 0.4
elif df['mbs'] == "512":
df['Additional Charge'] = (df['Wholesale Data Usage'] - df[
'mbs']) * 0.3
elif df['mbs'] == "1024":
df['Additional Charge'] = (df['Wholesale Data Usage'] - df[
'mbs']) * 0.3
else:
df['Additional Charge'] = 0
else:
df['Additional Charge'] = 0
不知道我在做什么错。
1楼
首先,对于32,您乘以0.5,而不是0.56。
然后,似乎您已经混淆了Strings和Integers 。
如果df['Wholesale Data Usage']
和df['mbs']
存储的数据的类型为String,则您不能检查大于( >=
),也不能从中减去一个。
我怀疑存储在字典中的数据是Integer或Float或Double类型的。 在这种情况下,您尝试将数据与字符串进行比较,并应更改以下内容:
if df['mbs'] == "32":
至:
if df['mbs'] == 32:
并在每次比较时都这样做
2楼
您的代码是如此难以阅读,难以调试。 编码样式将帮助您查看自己认为的错误。 如果你这样写怎么办?
mbs = df['mbs']
wdu = df['Wholesale Data Usage']
ac = 0
if wdu >= mbs and mbs == "32" : ac = (wdu - mbs) * 0.56
if wdu >= mbs and mbs == "64" : ac = (wdu - mbs) * 0.5
if wdu >= mbs and mbs == "128" : ac = (wdu - mbs) * 0.4
if wdu >= mbs and mbs == "256" : ac = (wdu - mbs) * 0.4
if wdu >= mbs and mbs == "512" : ac = (wdu - mbs) * 0.3
if wdu >= mbs and mbs == "1024" : ac = (wdu - mbs) * 0.3
df['Additional Charge'] = ac
话虽这么说,您有类型问题。
我正在比较的第一个等式mbs=="32"
好像您有一个字符串。
然后在方程式中尝试添加值,就好像它们包含一个int一样-这将无法工作。
让类型变得合理。
mbs = float(df['mbs'])
wdu = float(df['Wholesale Data Usage'])
ac = 0
if wdu >= mbs and mbs == 32 : ac = (wdu - mbs) * 0.56
if wdu >= mbs and mbs == 64 : ac = (wdu - mbs) * 0.5
if wdu >= mbs and mbs == 128 : ac = (wdu - mbs) * 0.4
if wdu >= mbs and mbs == 256 : ac = (wdu - mbs) * 0.4
if wdu >= mbs and mbs == 512 : ac = (wdu - mbs) * 0.3
if wdu >= mbs and mbs == 1024 : ac = (wdu - mbs) * 0.3
df['Additional Charge'] = str(ac) #<- you need to know what the expected type is here.
3楼
我认为您的逻辑以及代码逐步通过逻辑的方式存在一些问题,例如,您检查mbs
列是否等于32,但实际上应该是“ Wholesale Data Usage
列与mbs
栏等于32。
这应该可以解决您的逻辑问题,而无需编辑过多的代码:
df['mbs'] = np.where(df['Wholesale Data Usage'] >= df['mbs'], df['Wholesale Data Usage']-df['mbs'], 0)
if df['mbs'] == "32":
df['Additional Charge'] = (df['mbs']) * 0.5
elif df['mbs'] == "64":
df['Additional Charge'] = (df['mbs']) * 0.5
elif df['mbs'] == "128":
df['Additional Charge'] = (df['mbs']) * 0.4
elif df['mbs'] == "256":
df['Additional Charge'] = (df['mbs']) * 0.4
elif df['mbs'] == "512":
df['Additional Charge'] = (df['mbs']) * 0.3
elif df['mbs'] == "1024":
df['Additional Charge'] = (df['mbs']) * 0.3
else:
df['Additional Charge'] = 0