从dataframe中匹配的单词列表中创建新列

时间:2017-03-02 16:49:01

标签: python pandas dataframe contains

我有一个数据框,其中的列包含字词和数字之间带有混合分隔符(空格与无空格)的字符串:

Make1_mask = df['Widgets'].str.contains('Make1')
Make2_mask = df['Widgets'].str.contains('Make2')

我想分离make和model并在数据文件中创建新列。问题是模型名称建立在自己身上,所以我不能做一个简单的df.str.contains()。

https://stackoverflow.com/users/704848/edchumHow to Add a New Column With Selected Values from Another Column In Python的回答很接近,但由于在不同的模型中使用相同的单词,因此它不会给出与所有单词匹配的模型。

我知道make和model的可能单词,所以目前我正在为每个单词创建掩码:

df.ix[Make1_mask,'Make'] = 'Make1'
df.ix[Make2_mask,'Make'] = 'Make2'

然后分配到新列'制作'

# First model contains same words as Model2 and Model3
Model1_mask = df['Model'].str.contains('Modelx Modely Modelz')
Model2_mask = df['Model'].str.contains('Modelx Modely')
Model3_mask = df['Model'].str.contains('Modelx')
# Completely unique models are easier
Modelfoo_mask = df['Model'].str.contains('Modelfoo')
Modelbar_mask = df['Model'].str.contains('Modelbar')

模特相同:

df.ix[Model1_mask ,'Model'] = 'Model1'
df.ix[Model2_mask ,'Model'] = 'Model2'
df.ix[Model3_mask ,'Model'] = 'Model3'
df.ix[Model4_mask ,'Model'] = 'Model Foo'
df.ix[Model5_mask ,'Model'] = 'Model Bar'

然后分配到新列'模型'

Widgets                                    Make         Model

MakeOneModelx2000                          Make1        Model1
MakeOneModelx Modely2000                   Make1        Model2
MakeOneModelx Modely Modelz2000            Make1        Model3
Make123456ThreeModelfoo                    Make3        Model Foo
Make123456FourModelbar                     Make4        Model Bar

这在某种程度上起作用,但取决于我如何命令模型的分配,它将覆盖包含相同单词的模型。

有没有办法确保正确分配模型,以便只包含三个单词中的一个的模型在包含该单词和其他单词的模型中被认为是相同的?

所以我得到了:

df.str.extract()

显然对Python / Pandas来说是新手,所以我确信有一种更有效的方法可以做到这一点,这也是值得赞赏的。为了完整性,我将数字放在Widgets列中。我使用df['Year'] = df['Widgets'].str.extract('(201/d)',expand=False) df['Model Number'] = df['Widgets'].str.extract('(/d/d/d/d/d/d)',expand=False) 根据型号(123456)和年份(2000)创建新列:

opacity: 0;

谢谢你的时间!

0 个答案:

没有答案