开发者

Python - Changing names of rows if they are repeated

开发者 https://www.devze.com 2022-12-07 22:41 出处:网络
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:

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&qu开发者_Python百科ot;,"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.


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.


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)
0

精彩评论

暂无评论...
验证码 换一张
取 消