当前位置: 首页 > 面试题库 >

Pandas groupby和聚合输出应包括所有原始列(包括未聚合的列)

朱明知
2023-03-14
问题内容

我有以下数据框,并希望:

  • 分组记录 month
  • 点心QTY_SOLDNET_AMT每一个独特的UPC_ID(每月)
  • 在结果数据框中也包括其余的列

我想我能做到这一点的方法是1:创建一个month聚合列D_DATES,再总结QTY_SOLDUPC_ID

脚本:

# Convert date to date time object
df['D_DATE'] = pd.to_datetime(df['D_DATE'])

# Create aggregated months column
df['month'] = df['D_DATE'].apply(dt.date.strftime, args=('%Y.%m',))

# Group by month and sum up quantity sold by UPC_ID
df = df.groupby(['month', 'UPC_ID'])['QTY_SOLD'].sum()

当前数据帧:

UPC_ID | UPC_DSC | D_DATE | QTY_SOLD | NET_AMT
----------------------------------------------
111      desc1    2/26/2017   2         10 (2 x $5)
222      desc2    2/26/2017   3         15
333      desc3    2/26/2017   1         4
111      desc1    3/1/2017    1         5
111      desc1    3/3/2017    4         20

所需输出:

MONTH | UPC_ID | QTY_SOLD | NET_AMT | UPC_DSC
----------------------------------------------
2017-2      111     2         10       etc...
2017-2      222     3         15
2017-2      333     1         4
2017-3      111     5         25

实际输出:

MONTH | UPC_ID  
----------------------------------------------
2017-2      111     2
            222     3
            333     1
2017-3      111     5
...

问题:

  • 如何包含每一行的月份?
  • 如何包含数据框的其余列?
  • NET_AMT除了又如何求和QTY_SOLD

问题答案:

agg具有dict功能

创建一个dict函数并将其传递给agg。您还需要as_index=False防止组列成为输出中的索引。

f = {'NET_AMT': 'sum', 'QTY_SOLD': 'sum', 'UPC_DSC': 'first'}
df.groupby(['month', 'UPC_ID'], as_index=False).agg(f)

     month  UPC_ID UPC_DSC  NET_AMT  QTY_SOLD
0  2017.02     111   desc1       10         2
1  2017.02     222   desc2       15         3
2  2017.02     333   desc3        4         1
3  2017.03     111   desc1       25         5

sum

只需调用sum而无需任何列名。这将处理数字列。对于UPC_DSC,您需要单独处理。

g = df.groupby(['month', 'UPC_ID'])
i = g.sum()
j = g[['UPC_DSC']].first()

pd.concat([i, j], 1).reset_index()

     month  UPC_ID  QTY_SOLD  NET_AMT UPC_DSC
0  2017.02     111         2       10   desc1
1  2017.02     222         3       15   desc2
2  2017.02     333         1        4   desc3
3  2017.03     111         5       25   desc1


 类似资料:
  • 即将用Maven TestNG Selenium实现一个测试框架。 如何声明告诉TestNG运行所有测试的suite.xml?我尝试了所有这些都无济于事: 我需要用不同的参数指定不同的套件配置,但都运行所有测试。我能找到的每一个例子都清楚地列出了对我来说意义不到零的每个类或包。

  • 问题内容: 如何以方便的方式选择表中的所有列和聚合函数? 也就是说,我有一个包含100列的表格,我想发送以下内容 谢谢! 问题答案: 要从表中选择所有列,请执行以下操作: 要从表中选择一个最大值是 两者结合: 如果要在结果行中省略column44并且仅具有maxcol44,则必须列出这些列:

  • 我想列出所有/任何DNS记录,包括DANE TLSA。 具有 我得到了所有的记录,包括DNSSEC等,但没有关于DANE。为什么啊? 具有 我有丹麦TLSA的记录。 我读过一个问题,有人想查询所有子域,我如何列出所有DNS记录?我知道这只有在区域转移的情况下才能实现。 但是_443_tcp不是真正的子域,是吗?我以为这只是一个SRV记录。那么,我如何查询任何东西,包括DANE TLSA?

  • 问题内容: 我正在尝试在Oracle中编写一个自定义聚合函数,并将该函数与其他一些函数一起分组在一个包中。作为一个示例(为了模拟我遇到的问题),假设我的自定义聚合对数字进行求和看起来像: 如果我编写以下函数定义: 和相应的类型声明进行测试: 这个说法: 给出正确的结果70。但是,使用函数定义创建一个包: 并通过以下方式调用: 与爆炸 是否可以在包声明中嵌套自定义聚合函数? 问题答案: Oracle

  • 我有一个列表 >输入,如下所示: 我试图通过对CURRENCY、PUBLISH_REGION、SOURCE和RECON_STATUS列进行分组来创建另一个列表 >。并将所有唯一状态值作为数据透视添加到输出映射中,并使用JOB_ID_COUNT汇总/聚合计数。 我期待以下响应:输出: 尝试按多个映射字段分组时,我遇到编译时错误。单字段groupingBy工作正常。任何帮助都是非常有效的。

  • Django数据库抽象API描述了使用Django查询来增删查改单个对象的方法。然而,你有时候会想要获取从一组对象导出的值或者是聚合一组对象。这份指南描述了通过Django查询来生成和返回聚合值的方法。 整篇指南我们都将引用以下模型。这些模型用来记录多个网上书店的库存。 from django.db import models class Author(models.Model): na