3

I'm trying to verify some codes in a dataframe named "productos_farmacia" from 2 diferents data frames named "cuarta" and "promocion", the verification seems correct, but the storage is wrong. sorry for my english

for x in productos_farmacia["Código"]:
    for y in cuarta["Producto"]:
        if x == y:
            productos_farmacia.loc[x,"tipo"] = "IV"
    for z in promocion["Producto"]:
        if x == z:
            productos_farmacia.loc[x,"tipo"] = "Promocion"
Shakeel
  • 1,869
  • 15
  • 23
Ro Correa
  • 31
  • 4
  • 1
    Its good idea to have a look on this like to post to make pandas question more clear. https://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples. – Shakeel Jun 12 '20 at 15:17

2 Answers2

1

You can use lists intersection, try this:

for x in list(set(productos_farmacia["Código"])&set(cuarta["Producto"])):
    [productos_farmacia.loc[x,"tipo"] = "IV" 

for x in list(set(productos_farmacia["Código"])&set(promocion["Producto"])):
    productos_farmacia.loc[x, "tipo"] = "Promocion"
Houda
  • 671
  • 6
  • 16
  • This approach seem ineteresting, I'm not much familiar with set, but I will give it a shoot. thank you! – Ro Correa Jun 13 '20 at 16:25
1

Avoid looping and consider multiple left join merge followed by conditional assignment:

# RUN TWO LEFT JOIN MERGES
productos_farmacia = (productos_farmacia.merge(cuarta.reindex(["Producto"], axis="columns"),
                                               left_on=["Código"], right_on=["Producto"]), how="left")           
                                        .merge(promocion.reindex(["Producto"], axis="columns"), 
                                               left_on=["Código"], right_on=["Producto"]), 
                                               how="left", suffixes=["", "_"])
                     )

# CONDITIONALLY ASSIGN FOR NON-NULL FIELDS
productos_farmacia.loc[pd.notnull(productos_farmacia["Producto"]),"tipo"] = "IV"
productos_farmacia.loc[pd.notnull(productos_farmacia["Producto_"]),"tipo"] = "Promocion"

# DROP HELPER, MERGED COLUMNS
productos_farmacia = productos_farmacia.drop(["Producto", "Producto_"], axis="columns")
Parfait
  • 104,375
  • 17
  • 94
  • 125