2016-11-22 118 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