【问题标题】:Pandas sum corresponding values based on values in another columnPandas 根据另一列中的值对相应值求和
【发布时间】:2022-01-05 02:02:03
【问题描述】:

我有一个表 df1,其中包含列 Itemlist1 和 Itemlist2,其中该表中的每个单元格可以包含从 1 开始的任意数量的项目。示例:一个单元格中可以有 1 个项目 A,另一个单元格中可以有 2 个项目 B、C单元格和 3 个项目 A、D、E 在另一个中。

我有另一个表格 df2,其中包含每个项目的价格和成本。

我想创建这个最终的 df,并将 2 个新列添加到 df1、Totalprice 和 Totalcost。 Totalprice 和 Totalcost 是 df1 每一行中所有项目的总和。示例:在第 2 行中,Totalprice 是 B、​​A、D 项的价格之和,Totalcost 是 B、​​A、D 项的成本之和。

我正在考虑将所有项目合并到 df1 中的一列中,将每个项目拆分为一列,然后将其与 df2 合并。这是我目前所拥有的。

df1["items"]=df1[["Itemlist1","Itemlist2"]].agg(', '.join,axis=1)

df3=df1['items'].str.split(', ',expand=True)

由于每行中的项目数不固定,列名也不匹配,如何循环以与 df2 合并?

或者,有没有更好的方法来达到我想要的最终 df?请有任何建议。谢谢。

【问题讨论】:

    标签: python pandas dataframe loops merge


    【解决方案1】:

    从您的 df3 执行 replace,然后执行 sumaxis=1

    cost_dict = dict(zip(df2.Itemcode,df2.Cost))
    price_dict = dict(zip(df2.Itemcode,df2.Price))
    df1['totalcost'] = df3.replace(cost_dict).sum(axis=1)
    df1['totalprice'] = df3.replace(price_dict).sum(axis=1)
    

    【讨论】:

    • 谢谢@BENY,您的解决方案运行良好。
    猜你喜欢
    • 2016-01-16
    • 2021-09-15
    • 1970-01-01
    • 2019-08-10
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多