Erstellen Sie ein inkrementelles Suffix für Werte in einer Pandas-Spalte, die doppelte Werte in einer anderen Spalte habPython

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

Post by Anonymous »

Setup
Ich habe einen Datenrahmen, df

Code: Select all

import pandas as pd

df = pd.DataFrame(
{
'Name':['foo','foo','foo','bar','bar','bar','baz','baz','baz'],
'Color':['red','blue','red','green','green','blue','yellow','orange','red']
}
)

Code: Select all

  Name   Color
0  foo     red
1  foo    blue
2  foo     red
3  bar   green
4  bar   green
5  bar    blue
6  baz  yellow
7  baz  orange
8  baz     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']
}
)

Code: Select all

    Name   Color
0  foo_1     red
1    foo    blue
2  foo_2     red
3  bar_1   green
4  bar_2   green
5    bar    blue
6    baz  yellow
7    baz  orange
8    baz     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