Python Pandas-对每个子集应用转换(在n列上选择)

Python Pandas-对每个子集应用转换(在n列上选择),python,jupyter-notebook,Python,Jupyter Notebook,我目前正在使用以下数据帧,大约有300k行,以及4k唯一id_用户 我想将具有相同{id_user,date,id_item}的行“合并”为一行,其中包含{qty,price}的平均值 这是到目前为止我实现的最简单的想法,但我相信有更好的方法来正确实现这一点 这里的想法就是用相同的{id_user,date,id_item}迭代数据帧的每个子集,然后保留第一行,并用子集的平均值替换它的{qty,price}。删除其他行后,将其id_user更改为“DEL”并清空所有其他属性。(我必须将这些条目

我目前正在使用以下数据帧,大约有300k行,以及4k唯一id_用户

我想将具有相同{id_user,date,id_item}的行“合并”为一行,其中包含{qty,price}的平均值

这是到目前为止我实现的最简单的想法,但我相信有更好的方法来正确实现这一点

这里的想法就是用相同的{id_user,date,id_item}迭代数据帧的每个子集,然后保留第一行,并用子集的平均值替换它的{qty,price}。删除其他行后,将其id_user更改为“DEL”并清空所有其他属性。(我必须将这些条目保留在DF中)

尝试:


您知道如何将此结果合并到初始数据帧中吗?如果“合并”的意思是“替换”,请执行
df=df.groupby…
而不是
grouped\u df=df.groupby…
。如果您想在现有行的末尾添加这些新行,请执行
df=df.append(grouped_-df)
这有多个问题,首先:新创建的grouped_-df中的索引与初始df中的索引不对应,因此简单的df[“price”]=df.group.by。。。不起作用,第二:我仍然需要找到一种方法来“删除”每个分区中的所有(n-1)行,同时保留第一行。@FeatherAndInk您如何期望您创建的“合并行”中的索引与原始的索引相对应?根据定义,现在的行要少得多。我的解决方案给了你们每组一行。如果只想保留一行,为什么要问如何将其添加到原始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']]