我目前正在使用以下数据框,大约有 300k 行和 4k 个唯一 id_user。
我想将具有相同 {id_user,date,id_item} 的行“合并”到包含 {qty,price} 平均值的一行中。
这是我迄今为止实现的最简单的想法,但我确信有更好的方法来正确地做到这一点。
这里的想法只是使用相同的 {id_user,date,id_item} 迭代数据帧的每个子集,然后保留第一行,并将其 {qty, Price} 替换为子集的平均值。通过将其他行的 id_user 更改为“DEL”并清空所有其他属性来删除其他行。 (我必须将这些条目保留在 DF 中)
def mergeIdentical():
dates = df["date"].unique()
users=df["id_user"].unique()
for d in dates:
for u in users:
mask=(df["date"]==d) & (df["id_user"]==u)
ids = df[mask]["id_item"].unique()
for i in ids:
mask=(df["date"]==d) & (df["id_user"]==u) & (df["id_item"]==i)
df.loc[df[mask].index[0],"qty"]=df[mask]["qty"].mean()
df.loc[df[mask].index[0],"price"]=df[mask]["price"].mean()
if(len(df[mask].index)>1):
df.loc[df[mask].index[1:],"id_user"]="DEL"
df.loc[df[mask].index[1:],["date","hours","id_item","price","qty","month","year"]]=''
最佳答案
尝试:
grouped_df = df.groupby(['id_user', 'date', 'id_item'], as_index=False).mean()[['qty', 'price']]
关于python - Pandas - 对每个子集应用转换(在 n 列中选择),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58930692/