1

I have a trade data of the country with the following column names

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

Now I am trying to fill the 'Type' column with 'Raw' if the string from the raw_materials list is the same with string in df['TNVED']. The data frame look like:

     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]

and list

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

TNVED column contains the str values. and I want if a string value is equal to string value from the list the 'Type' column should take 'Raw' otherwise has to be empty. Furthermore, as you can see the list contains two values where the length of the string is two, in this case, all string values starting with these strings have to change. Finally according to the given data frame I expect:

     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                  

I have tried

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`
Mikoupgrade
  • 65
  • 1
  • 9
  • 1
    Could you make an example that is less cumbersome, according to [this guide](https://stackoverflow.com/a/20159305/3620003), please? – timgeb Jun 12 '20 at 09:43
  • There area ton of questions like this already https://stackoverflow.com/search?q=pandas+new+column+based+on+other – Chris Doyle Jun 12 '20 at 09:48
  • @ChrisDoyle Thanks for your reply, however, I tried, but I stack when the length of the string from a list is equal to 2 while the length of the string in the "TNVED" column is 6. – Mikoupgrade Jun 12 '20 at 09:52

1 Answers1

0

Use, Series.str.contains along with regex pattern to create a boolean mask, then substitute values in Type column using this mask:

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

You can test the regex pattern here.

Shubham Sharma
  • 68,127
  • 6
  • 24
  • 53
  • I applied your method, it works fine, but I code is confusing when for example, the list has '2501' and this must be 'Raw material' and dataframe getting 'Raw_material' while 250112 is 'Non raw'. How can I accomplish this? – Mikoupgrade Jun 12 '20 at 10:56
  • Not sure if i understand, Can you edit the question or maybe ask new question showing what you want to achieve? – Shubham Sharma Jun 12 '20 at 10:59