如何基于函数在python中创建一个特性?

时间:2018-02-01 16:42:51

标签: python pandas

第一次堆栈溢出在这里。我正在尝试为我正在研究的这个数据科学项目创建一些新功能(对银行交易数据进行分类)。例如,我有“自动付款”,“气体”,“停车”等交易类别,我想创建一个名为“Car”的新功能,其中任何具有任何这些单词的类别将被赋予值1 (并且所有其他类别将被赋予0)。

我尝试为“car”编写一个函数,但我无法弄清楚如何根据此函数的结果创建一个新功能。我觉得必须有一个简单的方法来做到这一点,但我在python上有点新,并且无法搞清楚它!

这是我的汽车功能:

def car():
    df.category.apply(lambda x: "Auto" in x)
    df.category.apply(lambda x: "Gas" in x)
    df.category.apply(lambda x: "Parking" in x)
    df.category.apply(lambda x: "Service & Parts" in x)

以下是我尝试创建“car”新列的代码:

df['car'] = "1" if car==True else "0"

这是df的样子:

Date  Description   Amount  Category

2017-01-02  Tacos   8.34    Restaurants
2017-01-02  Transfer to Free Checking   800.00  Transfer
2016-12-30  Shell   26.26   Gas & Fuel
2016-12-29  Sunoco  22.59   Gas & Fuel

谢谢!我感谢您提供的任何意见。

1 个答案:

答案 0 :(得分:1)

在Pandas中尝试尽可能多地使用矢量化方法......在这种情况下,您可以使用矢量化字符串操作方法套件。以下是文档中的a good tutorial on them

特别是我们可以使用.str.contains来检查系列的每个元素中是否有正则表达式。 Here是关于正则表达式的Python教程。

由于str.contains返回bool,您可以使用.astype将其转换为int(0或1)。

df['car'] = df['Category'].str.contains('(Auto)|(Gas)|(Parking)|(Service & Parts)').astype(int)
print(df)

输出

         Date                Description  Amount     Category  car
0  2017-01-02                      Tacos    8.34  Restaurants    0
1  2017-01-02  Transfer to Free Checking  800.00     Transfer    0
2  2016-12-30                      Shell   26.26   Gas & Fuel    1
3  2016-12-29                     Sunoco   22.59   Gas & Fuel    1