【问题标题】:How to rewrite Pandas frame.append with concat如何使用 concat 编写 Pandas dataframe.append
【发布时间】:2023-02-21 04:59:25
【问题描述】:

我有以下代码,可以完美地放入小计和总计。随着 frame.append 方法的弃用,应该如何重写?

pvt = pd.concat([y.append(y.sum()
                           .rename((x, 'Total')))
                for x, y in table.groupby(level=0)
                 ]).append(table.sum()
                                 .rename(('Grand', 'Total')))

在此之前,我创建了一个数据透视表。所以我正在寻找要堆叠的总数,而不是添加为另一列

pivot = pd.pivot_table(data=df2,
            index=['date_created','BuyerName'],
            aggfunc='sum').round()

我收到以下建议 #2 的错误 ---> 17 pvt = pd.concat([x for _, y in table.groupby(level=0) for x in (y, y.sum().rename((x, 'Total')))] +
18 [table.sum().rename(('Grand', 'Total'))]) '全部的'))) 25 回报(pvt)

UnboundLocalError:赋值前引用的局部变量“x”

【问题讨论】:

  • 请阐明您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python pandas concatenation deprecated


【解决方案1】:

使用

pvt = pd.concat([y for x, y in table.groupby(level=0)] + 
                [y.sum().rename((x, 'Total')) for x, y in table.groupby(level=0)] + 
                [table.sum().rename(('Grand', 'Total'))])

# or

pvt = pd.concat([x for _, y in table.groupby(level=0) for x in (y, y.sum().rename((x, 'Total')))] + 
                [table.sum().rename(('Grand', 'Total'))])

【讨论】:

    【解决方案2】:

    Ynjxsjmh 的回答不会为我编译,所以这就是我最终使用的:

    pd.concat([x for a, y in table.groupby(level=0) for x in (y, y.sum().rename((a, 'Total')).to_frame().T)] + 
              [table.sum().rename(('Grand', 'Total')).to_frame().T])
    

    据我所知,代码是这样工作的:

    table.groupby(level=0) 返回我们可以操作的 (entry_name,subframe) 元组。我们需要原始子帧 (y) 和子帧计算 (y.sum()...),所以我们执行 multi-for list comprehension 来返回它们。

    不幸的是,如果 y.sum() 返回一个系列(因为它很容易这样做),我们需要将它拉回一个带有 to_frame() 的框架。我不确定为什么这需要转置,但它修复了我遇到的一些错误,所以 ymmv。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 2023-02-18
      • 2019-03-26
      • 2018-03-03
      • 2021-04-08
      • 2022-11-10
      • 2019-01-18
      相关资源
      最近更新 更多