2014-09-19 115 views
0

我想創建一個等於列A的數據框(如果列C =「a」)和列B(如果列C =「b」)的新列。我已經實現了這一點:根據其他列上的條件選擇列,vectorized,pandas

def f(row): 
    if row['C'] = 'a': 
     return row['A'] 
    elif row['C'] = 'b': 
     return row['B'] 
    return np.nan 

df['new'] = df.apply(f, axis=1) 

我感覺好像代碼運行緩慢。 The answer here解釋說這不是矢量化的。

或者:

df.ix[df[C]=='a',df['new']] = df.ix[df[C]=='a',df['A']] 
df.ix[df[C]=='b',df['new']] = df.ix[df[C]=='b',df['B']] 

這是量化的?在熊貓中做這件事有沒有不同的「正確」方式?矢量化函數會有什麼不同?

+1

應用僅僅是一個循環,並且應儘量避免使用,您的解決方案是好的,也有做你想要什麼的許多方面。它取決於數據的大小,你的示例代碼可以簡化:'df.loc [df ['C'] =='a','new'] = df ['A']'同樣適用於其他條件 – EdChum 2014-09-19 13:54:29

回答

0

嘗試

df["new"]=np.nan 
df["new"][df["C"]=='a']=df["A"] 
df["new"][df["C"]=='b']=df["B"] 
+0

我喜歡它作爲我的簡化版本。另一方面,我懷念Excel嵌套的'if'語句。我不知道爲什麼! – KieranPC 2015-01-19 19:38:40

相關問題