Home > other >  Python - Changing names of rows if they are repeated
Python - Changing names of rows if they are repeated

Time:12-07

I wanna change the column "Cuenta" of my dataframe from the left one to the right table, like I show you in the next picture:

entimaer image description here

As you can see the change depends of the number of repetitions of the value "Cuenta" over "Entidad".

df = pd.DataFrame({
"Entidad":["A","A","A","A","A","A","A","B","B","B","B","B"],
"Cuenta": ["Surco","Lima","Miraflores","Lima","SMP","Surco","Lima","Surco","Lima","Miraflores","Lima","SMP"],
"Valor": [12,14,11,7,5,4,22,11,34,21,17,25],
})

Thank your again for your help.

CodePudding user response:

First create a new "suffix" column in your pandas dataframe:

df['suffix']=1

Then create a new column consisting of "Entidad" and "Cuenta":

df['Entidad_Cuenta'] = df['Entidad'] '_' df['Cuenta']

You can then groupby your dataframe by "Entidad_Cuenta" and compute the cumulative sum of the "suffix", in order to count the number of identical "Cuenta" values for each "Entidad"; you may then append this suffix to "Cuenta":

df['Cuenta'] = df['Cuenta']   df.groupby('Entidad_Cuenta').cumsum()['suffix'].astype(str)

df['Cuenta'] returns

0          Surco1
1           Lima1
2     Miraflores1
3           Lima2
4            SMP1
5          Surco2
6           Lima3
7          Surco1
8           Lima1
9     Miraflores1
10          Lima2
11           SMP1

I will leave it to you to figure out how to drop "suffix" and "Entidad_Cuenta" from your output dataframe.

CodePudding user response:

store = {}

def fun(item):
  global store
  _ = store.setdefault(item, 0)
  store[item]  = 1
  return str(item)   ('' if store[item] == 1 else str(store[item]))

# make sure to put store = {} before each column
df.Cuenta.apply(fun)
  • Related