根据另一列中的值创建新列

时间:2018-10-28 20:25:22

标签: python python-3.x pandas numpy

我正在尝试根据其他列中的值创建新的功能列。因此,我有一列带有注释的列,如果它们包含url地址,我想将1输出到新列,否则输出0,因此这将是二进制功能。

Text                                                        Contains_Url

Buy round lot on the open MT @WSJD #AAPL                               1
stock briefly dove 6.4% today. Analysts 
not sure why https://blogs.wsj.com/moneybeat/
2014/12/01/apple-crash-catches-wall-street-off-guard/

@apple Contact sync between Yosemite and iOS8 is                       0
seriously screwed up. It used to be much more stable 
in the past. #icloud #isync

所以会有像这样的行,我想在数据框中基于文本列使用1或0创建一个新列(如果有或没有URL)。只是为了检查带有url的推文数量与其余数据集相比,我做了

data.shape
(3804, 12)
data[data.text.str.contains("http")].shape
(2130, 12)

因此,它可以准确显示具有url的行数。我的想法是创建一个可以执行此操作的函数,然后使用lambda进行应用

def contains_url(row):
if data[data.text.str.contains("http")]:
    return 1
else:
    return 0

data['contains_url'] = data.apply (lambda row: contains_url(row),axis=1)

ValueError: ('The truth value of a DataFrame is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')

但是这样做是在上面给我这个错误。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您可以在没有apply的情况下更有效地执行此操作,只需使用str.contains('http')产生的布尔值并将其强制转换为int

data['contains_url'] = data['Text'].str.contains('http').astype(int)