如何基于其他列字符串为新列分配值?

时间:2020-06-12 09:40:01

标签: python-3.x pandas

我有该国家的贸易数据,列名称如下

Index(['TNVED', 'Product_Name', 'Export_Value', 'Import_Value', 'Year',
       'Country', 'Region', 'Total_Export_XLS', 'Total_Import_XLS',
       'Export_Sum', 'Import_Sum', 'Type', 'Nonraw_Type'],

现在,如果raw_materials列表中的字符串与df ['TNVED']中的字符串相同,我将尝试用'Raw'填充'Type'列。数据框如下:

     TNVED                                       Product_Name  ...  Type  Nonraw_Type
   010190           Лошади, ослы, мулы и лошаки живые прочие  ...                   
   010210  Чистопородный племенной крупный рогатый скот ж...  ...                   
   010511  Куры домашние (callus domesticus) живые массой...  ...                   
   010639                                Прочие хищные птицы  ...                   
   010690                              Прочие животные живые  ...                   
   020110  Мясо крупного рогатого скота, свежее или охлаж...  ...                   
   020322  Свиные окорока, лопатки и отруба из них, необв...  ...                   
   020713  Части тушек и субпродукты домашних кур, свежие...  ...                   
   020714  Части тушек и субпродукты домашних кур, мороженые  ...                   
   021099  Прочие: мясо и пищевые мясные субпродукты : вк...  ...                   
   030351  Рыба мороженная,за искл.рыбн.филе и прочего мя...  ...                   
   030379  Прочая рыба за исключением печени, икры и моло...  ...                   
   030530  Рыбное филе, сушеное, соленое или в рассоле, н...  ...                   
   030559  Прочая рыба сушеная, несоленая, или соленая, н...  ...                   
   030749                       Прочие каракатицы и кальмары  ...                   
   040221  Молоко и сливки сгущенные с содержанием жира б...  ...                   
   040221  Молоко и сливки сгущенные с содержанием жира б...  ...                   
   040299  Прочее молоко и сливки сгущенные с добавлением...  ...                   
   040299  Прочее молоко и сливки сгущенные с добавлением...  ...                   
   040510                                    Сливочное масло  ...                   
   040520                                     Молочные пасты  ...                   
   040630           Плавленные сыры, нетертые и не в порошке  ...                   
   040690                                        Прочие сыры  ...                   
   050400  Кишки, пузыри и желудки животных (кроме рыбьих...  ...                   
   050800  Кораллы и аналог.мат-лы,необработ.или первич.о...  ...                   
   051110                                       Сперма бычья  ...                   
   070320                      Чеснок свежий или охлажденный  ...                   
   071010  Картофель сырой или вареный в воде или на пару...  ...                   
   071022  Фасоль (vigna spp., pнaseolus spp.), в стручка...  ...                   
   071029  Прочие бобовые овощи в стручках или очищенные,...  ...                   

[30 rows x 13 columns]

并列出

raw_materials = [010190, 071029, 04, 05, etc] #strings

TNVED列包含str值。 我想如果字符串值等于列表中的字符串值,则“类型”列应采用“原始”,否则必须为空。此外,如您所见,列表包含两个值,其中字符串的长度为2,在这种情况下,必须更改所有以这些字符串开头的字符串值。最后,根据给定的数据帧,我期望:

     TNVED                                       Product_Name  ...  Type  Nonraw_Type
  010190           Лошади, ослы, мулы и лошаки живые прочие  ...  Raw                 
  010210  Чистопородный племенной крупный рогатый скот ж...  ...                   
  010511  Куры домашние (callus domesticus) живые массой...  ...                   
  010639                                Прочие хищные птицы  ...                   
  010690                              Прочие животные живые  ...                   
  020110  Мясо крупного рогатого скота, свежее или охлаж...  ...                   
  020322  Свиные окорока, лопатки и отруба из них, необв...  ...                   
  020713  Части тушек и субпродукты домашних кур, свежие...  ...                   
  020714  Части тушек и субпродукты домашних кур, мороженые  ...                   
  021099  Прочие: мясо и пищевые мясные субпродукты : вк...  ...                   
  030351  Рыба мороженная,за искл.рыбн.филе и прочего мя...  ...                   
  030379  Прочая рыба за исключением печени, икры и моло...  ...                   
  030530  Рыбное филе, сушеное, соленое или в рассоле, н...  ...                   
  030559  Прочая рыба сушеная, несоленая, или соленая, н...  ...                   
  030749                       Прочие каракатицы и кальмары  ...                   
  040221  Молоко и сливки сгущенные с содержанием жира б...  ...  Raw                 
  040221  Молоко и сливки сгущенные с содержанием жира б...  ...  Raw                 
  040299  Прочее молоко и сливки сгущенные с добавлением...  ...  Raw                 
  040299  Прочее молоко и сливки сгущенные с добавлением...  ...  Raw                 
  040510                                    Сливочное масло  ...  Raw                 
  040520                                     Молочные пасты  ...  Raw                 
  040630           Плавленные сыры, нетертые и не в порошке  ...  Raw                 
  040690                                        Прочие сыры  ...  Raw                 
  050400  Кишки, пузыри и желудки животных (кроме рыбьих...  ...  Raw                 
  050800  Кораллы и аналог.мат-лы,необработ.или первич.о...  ...  Raw                 
  051110                                       Сперма бычья  ...  Raw                 
  070320                      Чеснок свежий или охлажденный  ...                   
  071010  Картофель сырой или вареный в воде или на пару...  ...                   
  071022  Фасоль (vigna spp., pнaseolus spp.), в стручка...  ...                   
  071029  Прочие бобовые овощи в стручках или очищенные,...  ...  Raw                  

我尝试过

lens = len(raw_materials)-1

while(0<=lens):
    str_len = len(raw_materials[lens])
    print(str_len)
    df['Type'] = np.where(df['TNVED'] == raw_materials[lens], 'Raw', '')
    lens -= 1`

1 个答案:

答案 0 :(得分:0)

使用Series.str.contains和正则表达式模式创建布尔掩码,然后使用此掩码替换Type列中的值:

pattern = r'^(?:' + '|'.join(raw_materials) + ')'
m = df['TNVED'].str.contains(pattern)
df.loc[m, 'Type'] = 'Raw'

您可以测试正则表达式模式here

相关问题