第一次堆栈溢出在这里。我正在尝试为我正在研究的这个数据科学项目创建一些新功能(对银行交易数据进行分类)。例如,我有“自动付款”,“气体”,“停车”等交易类别,我想创建一个名为“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
谢谢!我感谢您提供的任何意见。
答案 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