Python 基于另一列中的值创建新列

Python 基于另一列中的值创建新列,python,python-3.x,pandas,numpy,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% t

我正在尝试根据不同列中的值创建新的功能列。因此,我有一个带有注释的列,如果它们包含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
所以会有这样的行,我想在dataframe中创建一个新列,如果文本列有url或没有url,则基于文本列使用1或0。只是为了与数据集的其他部分相比,检查带有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')

但这样做给了我上述的错误。任何帮助都将不胜感激。谢谢

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

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

非常感谢,这非常有效。我想我根本不需要函数,我把问题复杂化了!如果我想扩展它,而不是在列中只查找一个字符串,并且想在单个列中使用包含单词的不同数据帧,我将如何进行呢@sacul@codingenthusiast,我不太清楚你的意思是什么,你最好的办法可能是创建一个新问题并将其作为一个新问题发布,这样我们就可以看到你的具体要求:)