2016-11-22 87 views
0

我試圖根據另一列值在我的數據框(DF)中添加一列,以及該值是否在我的DF中。在DF中添加列,如果在DF中存在一列修改的值

實施例:

>>> d = { 'one' : pd.Series(['aa', 'bb', 'cc', 'aa-01', 'bb-02', 'dd']) } 
>>> df = pd.DataFrame(d) 
>>> df 
    one 
0  aa 
1  bb 
2  cc 
3 aa-01 
4 bb-02 
5  dd 

我想添加以下柱如果我能找到與當前元素另一元件所附-01或-02。例如:在此數據框中,只有元素'aa'和'bb'具有附加值的元素,分別是'aa-01'和'bb-02',因此只有'aa'和'bb'會有值True新列

預期結果:

>>> expected_df 
    one two 
0  aa True 
1  bb True 
2  cc False 
3 aa-01 False 
4 bb-02 False 
5  dd False 

我相信我一定要使用isin()apply(),但我不能想出一個辦法來修改行,並在使用isin在作爲參數傳遞給apply的函數中同一時間。

+2

是'DF [ '二'] =〜df.one.str.contains(01 | 02' ),'你在找什麼呢? – Psidom

+0

不,那對於那個'cc'這個行會返回True。我需要查看數據框是否包含帶有附加值的當前元素。它是否具有附加號碼不僅是事實。我會編輯我的問題,使其更清楚。我可以看到爲什麼誤解 – mk2

回答

1

使用str.endswith檢查以給定字符結尾的字符串並創建一個布爾值掩碼。接着去除掩模生成後的最後三個字符,並將其輸入到isin方法中。

mask = df['one'].str.endswith(('-01','-02')) 
df['two'] = df['one'].isin(df[mask].squeeze().str[:-3]) 
df 

enter image description here

+0

有一些元素在行中有「 - 」(破折號)。我正在等待數據庫重新填充以測試與您所做的相似的事情。我還必須使用一些str操作 – mk2

+1

我假設我編輯的答案也處理這種情況。基本上,它刪除了最後三個字符,並保持其餘未觸及,如果他們與提到的面具結束。 –

+1

太棒了。它完全符合我的需求。謝謝! – mk2