首页 > 解决方案 > 根据另一列中的值创建新列

问题描述

我正在尝试根据不同列中的值创建新的特征列。所以我有一个带有注释的列,如果它们包含一个 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

所以会有这样的行,我想根据文本列在数据框中创建一个新列,如果它有 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')

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

标签: pythonpython-3.xpandasnumpy

解决方案


我认为你可以在没有 的情况下更有效地做到这一点apply,只需使用从 产生的布尔值str.contains('http'),并将其转换为int

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

推荐阅读