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

标签 python jupyter-notebook

我目前正在使用以下数据框,大约有 300k 行和 4k 个唯一 id_user。

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

DataFrame

这是我迄今为止实现的最简单的想法,但我确信有更好的方法来正确地做到这一点。

这里的想法只是使用相同的 {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/

相关文章:

python - 在Python的jupyter笔记本中, `%%bash cat Testtext3.txt.*.decodes`有什么作用?

python - 如何通过 python 脚本路由 HTTP 请求?

python - 用 `validatecommand` 选项替换 ttk.Entry 小部件中的选定条目

javascript - 如何使用Django将表中的数据保存到数据库?

python - Linux上两个进程监听同一个串口

python - 使用 jupyter lab 重新连接以远程运行内核

python - 如何在 python 结构中提供公钥密码短语

jupyter-notebook - 如何消除[Errno 2]没有这样的文件或目录: 'mpg.csv' in Python?

python - 在Google CoLab Notebook中,如何在不进行两次身份验证的情况下从公共(public)Google云端硬盘和我的个人硬盘读取数据?

jupyter-notebook - "module not found"在 jupyter 实验室中,但在 "jupyter notebook"中工作正常