So erstellen Sie ein inkrementelles Suffix für Werte in einer Pandas-Spalte, die doppelte Werte in einer anderen Spalte Python

Python-Programme
Anonymous
 So erstellen Sie ein inkrementelles Suffix für Werte in einer Pandas-Spalte, die doppelte Werte in einer anderen Spalte

Post by Anonymous »

SETUP
Ich habe einen Datenrahmen, df

Code: Select all

import pandas as pd

pd.DataFrame(
{
'Name':['foo','foo','foo','bar','bar','bar','baz','baz','baz'],
'Color':['red','blue','red','green','green','blue','yellow','orange','red']
}
)
GEWÜNSCHTE AUSGABE
Ich möchte für jeden Namen ein Aufzählungssuffix hinzufügen, der eine doppelte Farbe hat

Code: Select all

pd.DataFrame(
{
'Name':['foo_1','foo','foo_2','bar_1','bar_2','bar','baz','baz','baz'],
'Color':['red','blue','red','green','green','blue','yellow','orange','red']
}
)

Wie Sie sehen können, gibt es ein Suffix mit einer inkrementellen Zählung für jedes Mal, wenn ein Name eine Wiederholungsfarbe hat. Wenn ein Name nur einmal eine Farbe hat, wird kein Suffix hinzugefügt.
WAS ICH VERSUCHT HABE
Ich habe darüber nachgedacht, eine .groupby() mit einem Aggregat von .value_counts() zu nehmen, um eine Gesamtzahl zu erhalten, und diese bei Bedarf irgendwie zum Zuweisen der Suffixe zu verwenden. Hier ist eine Idee, die ich hatte und die sehr ineffizient erscheint:

Code: Select all

# group by name aggregate color value counts
gb = df.groupby(['Name']).agg(Color_count=('Color','value_counts')).reset_index()

# keep only counts that are >1 ie need a suffix
gb = gb.loc[gb.Color_count > 1].copy()

# merge back to original df
df.merge(gb, on=['Name','Color'],how='left').fillna(0)

# from here, somehow start an incremental suffix for nonzero values of `Color_count`...

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post