我的代碼中有一個查詢,我在其中嘗試使用 if else case 來匯出資料框中的值,
import pandas as pd
import numpy as np
c=15
s={'yr':[2014,2014,2014,2014],'value':[10,20,20,50]}
p=pd.DataFrame(data=s)
if (p['value'])>= c:
p['qty']=c-p['value']
else:
p['value']
我在上面的代碼中收到錯誤-
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
基本上這應該是我的預期輸出 -
yr value qty
0 2014 10 10
1 2014 20 5
2 2014 20 5
3 2014 50 35
我應該如何解決這個錯誤?
uj5u.com熱心網友回復:
您可以使用 loc 陳述句選擇某些行:
# initialize the qty column
df['qty'] = df['value']
# adjust qty where qty is larger than c
df.loc[df['qty'] > c, 'qty'] -= c
uj5u.com熱心網友回復:
使用 的解決方案np.where,假設您的預期計算是p['value']-c而不是c-p['value']:
p['qty'] = np.where(p['value'] >= c, p['value']-c, p['value'])
結果:
yr value qty
0 2014 10 10
1 2014 20 5
2 2014 20 5
3 2014 50 35
uj5u.com熱心網友回復:
if需要一個布林值(真/假),但(p['value'])>= c它是一個系列,所以你得到了那個錯誤。獲得所需輸出的一種方法是使用mask:
p['qty'] = p['value'].mask(lambda x: x>=c, p['value']-c)
另一種選擇是使用numpy.where:
import numpy as np
p['qty'] = np.where(p['value']>=c, p['value']-c, p['value'])
輸出:
yr value qty
0 2014 10 10
1 2014 20 5
2 2014 20 5
3 2014 50 35
uj5u.com熱心網友回復:
您正在嘗試對列進行元素操作,這通常需要迭代或應用函式
p['qty'] = p['value'].apply(lambda x: c - x if x >= c else x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457667.html
