我已輸入參數通過如下參數字典通過 -「功能」&一個「爲」在大熊貓邏輯
paramDict = { "Period":
{
"Description": "A Period",
"Value" : ['9']
},
"AdditionalPeriods":
{
"Description": "An AdditionalPeriod",
"Value" : ['1']
}
}
而且,我有一個數據幀「df_AssetCst」,如下 -
>>> df_AssetCst.dtypes
FLCO object
FLN01 object
FLN02 object
FLN03 object
FLN04 object
FLN05 object
FLN06 object
FLN07 object
FLN08 object
FLN09 object
FLN10 object
FLN11 object
FLN12 object
FLN13 object
FLN14 object
現在基於傳遞給參數字典的價值,我要實現以下「的if-else」條件蟒蛇大熊貓 -
def func(row):
if pd.Series(paramDict['AdditionalPeriods']['Value'][0]) == '0':
return '0'
elif pd.Series(paramDict['AdditionalPeriods']['Value'][0]) == '1':
return df_AssetCst['FLN13']
elif pd.Series(paramDict['AdditionalPeriods']['Value'][0]) == '2':
return (df_AssetCst['FLN13'].astype(int)
+ df_AssetCst['FLN14'].astype(int))
else:
return 'other'
在SQL中,上述情況下的邏輯是如下 -
Case AdditionalPeriods = 0, Then NewColumn = 0
Case AdditionalPeriods = 1, Then NewColumn = FLN013
Case AdditionalPeriods = 2, Then NewColumn = FLN013 + FLN014
現在,我想用函數來創建在數據幀的新列 -
df_AssetCst['NewColumn'] = df_AssetCst.apply(func, axis=1)
但是,這給了我下面無差錯
ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', u'occurred at index 0')
在此之後,我想實現下面的 「爲」 邏輯 -
if Period.value = '9'
then NewColumn2 = FLN01+FLN02+FLN03+FLN04+FLN05+FLN06+FLN07+FLN08+FLN09
能否請您幫助我做一些方向&達到same.Thanks的最佳途徑
**********我的解決方案***********
#1. Function logic :
def func(row):
if paramDict['AdditionalPeriods']['Value'][0] == '0':
var = 0
elif paramDict['AdditionalPeriods']['Value'][0] == '1':
var = int(row['FLN13'])
elif paramDict['AdditionalPeriods']['Value'][0] == '2':
var = int(row['FLN13']) + int(row['FLN14'])
else:
var = -1
return(var)
#2. For logic
In_Period = paramDict['Period']['Value'][0]
colList = ['FLN{:0>2}'.format(X) for X in range(1, In_Period + 1)]
df_AssetCst['NewColumn1'] = df_AssetCst[colList].astype(int).sum(axis=1)
'ValueError:('一個Series的真值是不明確的......'在測試np.ndarray和一個標量之間的條件時出現,用'np.all()'或''np.any()'實際上''pd.Series'可能在'func'中被濫用,需要更多的信息,但我認爲'apply()'使用不正確,因爲'row'參數,'pd .Series',從來沒有用在'func()'中。[pandas](http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.apply.html):**「Objects傳遞給函數的是索引是DataFrame的索引(axis = 0)或列(axis = 1)的Series對象。「** –
@MarkMikofski - 增加了上面爲我工作的解決方案。 – 0nir