Hier habe ich ein Datenrahmen wie unten:Wie man Groupby Multi-Index als neue Spalten in Pandas konvertieren?
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame()
>>> df["user_id"] = [1,1,1,2,2,3,4,4,4,4]
>>> df["cate"] = ["a","b","c","b","c","a","a","b","c","d"]
>>> df["prob"] = [np.random.rand() for _ in range(len(df["user_id"]))]
ich die pro
jedes cate
als neue Spalten des Benutzers (user_id
), wie dies zu konvertierende
Die einzige Lösung, um dieses Problem zu lösen, ist die Verwendung for loop
, wenn ich Zehntausende Benutzer habe, ist es sehr ve langsam!
user_ids = list(set(df["user_id"]))
cates = list(set(df["cate"]))
user_probs = pd.DataFrame()
for uid in user_ids:
d = pd.DataFrame({'user_id': [uid]})
for c in cates:
ratio = df[(df["user_id"] == uid) & (df["cate"] == c)]["prob"]
ratio = 0 if len(ratio)==0 else float(ratio)
d["cate_"+c+"_prob"] = ratio
user_probs = pd.concat([user_probs, d])
Also, Pandas haben eingebaute Methode, um dieses Problem zu lösen? Vielen Dank!
Awesome! Vielen Dank! – SunnyMarkLiu