2017-07-20 72 views
1

我有3個數據框(df1,df2,df3),它們的結構相同(#和行/列標籤),但填充了不同的值。Python - 基於其他數據框'列中滿足條件的PANDAS數據幀列的人口

我想根據df1和df2中關聯的列/行中的值填充df3。我有一個FOR循環和一個自定義函數這樣:

for x in range(len(df3.columns)): 
    df3.iloc[:, x] = customFunction(x) 

我想用這個自定義填充DF3的if/else功能:

def customFunction(y): 
    if df1.iloc[:,y] <> 1 and df2.iloc[:,y] = 0: 
     return "NEW" 
    elif df2.iloc[:,y] = 2: 
     return "OLD" 
    else: 
     return "NEITHER" 

我明白爲什麼我得到一個錯誤消息時我運行這個,但我不知道如何將這個函數應用到一個系列。我可以用更復雜的代碼一行一行地做,但我希望有一個更有效的解決方案?我擔心我的做法有缺陷。

回答

1
v1 = df1.values 
v2 = df2.values 

df3.loc[:] = np.where(
    (v1 != 1) & (v2 == 0), 'NEW', 
    np.where(v2 == 2, 'OLD', 'NEITHER')) 
+0

YES!這很棒,很簡單,謝謝這些知識將成爲我前進的真正資產! – crowsnest

0

是的,儘量避免在熊貓環路,其效率低下,並建立與底層numpy矢量化使用。

您想使用apply函數。

喜歡的東西:

df3['new_col'] = df3.apply(lambda x: customFunction(x)) 

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html

+0

感謝tormond,雖然我得到的錯誤是使用自定義功能,因爲我試圖在一系列使用條件。以下是錯誤消息: 「ValueError:('DataFrame的真值不明確。使用a.empty,a.bool(),a.item(),a.any()或a.all()」 – crowsnest

+0

所以這是在很多地方回答。https://stackoverflow.com/questions/36921951/truth-value-of-a-series-is-ambiguous-use-a-empty-a-bool-a-item- a-any-o – tormond

+0

我可能會想念你想要告訴我的東西,但那個線程處理的是使用來自同一個數據幀的列過濾數據幀,我試圖使用條件來填充使用其他值的完整列數據框 – crowsnest

相關問題