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
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
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`...
Mobile version