Erste Verwendung read_csv
für create DataFrame
:
df = pd.to_csv('file.csv')
brauchen Dann set_index
mit unstack
:
df1 = df.set_index(['user_id','col'])['val'].unstack(fill_value=0)
print (df1)
col 1 2 3 4
user_id
8901 55 66 0 0
11501 77 0 88 99
Eine andere Lösung mit pivot
, NaN
-0
von fillna
und letzte Besetzung zu int
ersetzt:
df1 = df.pivot(index='user_id', columns='col', values='val').fillna(0).astype(int)
print (df1)
col 1 2 3 4
user_id
8901 55 66 0 0
11501 77 0 88 99
Wenn bekommen Fehler:
"ValueError: Index contains duplicate entries, cannot reshape"
Es bedeutet, dass Sie einige Duplikate haben, so schnellste Lösung ist groupby
mit unstack
und einige aggreagte Funktion wie mean
oder sum
:
print (df.groupby(['user_id','col'])['val'].mean().unstack(fill_value=0))
col 1 2 3 4
user_id
8901 55 66 0 0
11501 77 0 88 99
Besser es sehen in etwas csv
geändert:
print (df)
user_id col val
0 8901 1 55
1 8901 2 66
2 11501 1 77 > duplicates -> 11501 and 1
3 11501 1 151 > duplicates -> 11501 and 1
4 11501 3 88
5 11501 4 99
print (df.groupby(['user_id','col'])['val'].mean().unstack(fill_value=0))
col 1 2 3 4
user_id
8901 55 66 0 0
11501 114 0 88 99
Eigentlich dachte ich, ich hätte keine Duplikate, aber herausgefunden, dass ich wirklich einige habe ... Ich konnte nicht ".mean" verwenden, da es kategorialen Wert ist, aber th gelöst e Problem, indem sie zuerst an der sortierten Tabelle suchen und dann nur den letzten Eintrag zu halten ... dann die (super!) Anwendung Lösung .. die ich noch voll ;-) verstehen muß
df.sort(columns=(['user_id','col'])) # optional for debugging
df.drop_duplicates(subset=['user_id','col'], keep='last', inplace=True)
df_table = df.set_index(['user_id','col'])['val'].unstack(fill_value=0)
Wow, das ist schon ein cooler Ansatz, den ich seit Tagen nicht gefunden habe! Das Problem ist, dass ich einen Fehler beim Entstapeln bekomme> "ValueError: Index enthält doppelte Einträge, kann nicht umformen" –
Siehe aktualisierte Lösung, ich versuche, Problem zu erklären und Lösung zu bekommen. – jezrael
Tolle Lösung, die ich seit Tagen nicht mehr finden konnte! Danke vielmals! –