Pandas - 计算和旋转以获得前两年的收入

2024-01-07

我有一个如下所示的数据框

df = pd.DataFrame(
    {'stud_id' : [101, 101, 101, 101, 
                  101, 102, 102, 102],
     'sub_code' : ['CSE01', 'CSE01', 'CSE01', 
                   'CSE01', 'CSE02', 'CSE02',
                   'CSE02', 'CSE02'],
     'ques_date' : ['10/11/2022', '06/06/2022','09/04/2022', '27/03/2022', 
                '13/05/2010',  '10/11/2021','11/1/2022', '27/02/2022'],
     'revenue' : [77, 86, 55, 90, 
                65, 90, 80, 67]}
)
df['ques_date'] = pd.to_datetime(df['ques_date'])

我想做下面的事情

a) 根据我们组织的财政年度日历计算自定义财政年度。意思是,10月至12月是第一季度,一月至三月是第二季度,四月至六月是第三季度,七月至九月是第四季度。

b) 按 Stud_id 分组

c) 计算前两个自定义财政年度的收入总和(从特定日期 = 2022 年 12 月 20 日起)。例如,如果我们处于 2023 财年,我想分别获取客户 2022 财年和 2021 财年的收入总和

所以,我根据这篇文章尝试了以下内容here https://stackoverflow.com/questions/74860835/pandas-compute-previous-custom-quarter-wise-total-revenue-and-reshape-table

df['custom_qtr'] = pd.to_datetime(df['ques_date'], dayfirst=True).dt.to_period('Q-SEP')
date_1 = pd.to_datetime('20-12-2022') # CUT-OFF DATE
df['custom_year'] = df['custom_qtr'].astype(str).str.extract('(?P<year>\d+)')
df['date_based_qtr']  = date_1.to_period('Q-SEP')
df['custom_date_year'] = df['date_based_qtr'].astype(str).str.extract('(?P<year>\d+)')
df['custom_year'] = df['custom_year'].astype(int)
df['custom_date_year'] = df['custom_date_year'].astype(int)
df['diff'] = df['custom_date_year'].sub(df['custom_year'])
df = df[df['diff'].isin([1,2])]
out_df = df.pivot_table("revenue", index=['stud_id'],columns=['custom_year'],aggfunc=['sum']).add_prefix('rev_').reset_index().droplevel(0,axis=1)

但这会导致输出列不一致,如下所示

我希望我的输出如下所示

更新输出


看来您只需要首先对季度进行细化,过滤以仅包含 2021 年和 2022 年的行,然后进行汇总和透视:

(df.assign(
    qyear = pd.to_datetime(df['ques_date'], dayfirst=True).dt.to_period('Q-SEP').dt.qyear
  )[lambda x: x.qyear.isin([2021, 2022])]
  .assign(qyear=lambda x: x.qyear.astype('category').cat.set_categories([2021, 2022]))
  .groupby(['stud_id', 'qyear'])
  .revenue.sum()
  .unstack(level=1)
  .add_prefix('rev_')
  .reset_index(drop=False))

#qyear  stud_id  rev_2021  rev_2022
#0          101         0       231
#1          102         0       157

对于更新:

df['qyear'] = pd.to_datetime(df['ques_date'], dayfirst=True).dt.to_period('Q-SEP').dt.qyear.astype('category').cat.set_categories([2021, 2022])
df.groupby(['stud_id', 'sub_code', 'qyear']).revenue.sum().unstack(level=1, fill_value=0).add_prefix('rev_').reset_index(drop=False)

sub_code  stud_id qyear  rev_CSE01  rev_CSE02
0             101  2021          0          0
1             101  2022        231          0
2             102  2021          0          0
3             102  2022          0        157
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas - 计算和旋转以获得前两年的收入 的相关文章

随机推荐

  • 单击按钮时一个片段到另一个片段

    我已经学会了如何在单击按钮时将片段活动从一个更改为另一个 所有都是片段活动 但现在我遇到了同一片段上多个按钮的问题 只有第一个按钮 id 有效 我有多个按钮 每个按钮都有不同的片段活动 需要帮忙 package com test fragm
  • 将特定标头添加到 bitbake wget fetcher

    我需要设置一个特定的标头以使用以下命令从资源中获取存档wgetfetcher 类似于 wget header PRIVATE ACCESS TOKEN blablablablabla https some resource 如何使用该获取器
  • 如何在 iOS Swift 中将数据数组回调到另一个 viewController

    在createCardVC中 我使用carbonKit库来显示标签栏 最初 使用静态数据加载的数据数组 但现在我尝试使用来自 webView javascript postMessage 的数据数组 当 createCardVC 加载时 第
  • C++11 递归可变参数模板

    我想了解递归可变参数模板是如何工作的 include
  • Java 中的“快速”整数幂

    简短回答 糟糕的基准测试方法 你可能认为我现在已经明白了 该问题被表述为 找到一种快速计算x y的方法 其中x和y是正整数 典型的 快速 算法如下所示 public long fastPower int x int y Replaced m
  • 并发修改异常[重复]

    这个问题在这里已经有答案了 我有一小段代码 它给了我并发修改异常 我无法理解为什么我不断收到它 即使我没有看到任何并发修改正在进行 import java util public class SomeClass public static
  • SQL Server 和 Firebase/PouchDB 同步

    我正在构建一个 Web 应用程序 客户端需要在离线状态下通过浏览器访问数据存储 我正在考虑使用 Firebase 或 PouchDB 数据库在应用程序内实现此目的 但是 对于后端 我使用 SQL Server 我可以将 Firebase P
  • HTML 或 CSS 中的“父级”是什么?

    我被介绍到以下代码 div Here is span a span element span which is blue as span elements are set to be div div class extra style co
  • 如何在打字稿中将 array.map 与元组一起使用?

    每当我使用array map对于元组 Typescript 将其推断为通用数组 例如 以下是简单 3x3 数独游戏的一些片段 const a Blank type Blank typeof type Cell number Blank ty
  • 当扩展复杂类型时混合继承吗?

    我的架构中有以下内容
  • 迭代日期范围(scala 方式)

    给定开始日期和结束日期 我想使用 foreach map 或类似函数按天迭代它 就像是 DateTime now to DateTime now 5 day by 1 day foreach println 我在用https github
  • 放置新的零会占用内存吗?

    我有以下代码 struct foo void bar foo d new d foo d 是否表达new d foo d 留下指向的对象d不变 更具体地说 如果类foo并且其中递归包含的所有对象都只有简单的复制构造函数 那么new d fo
  • SQL 条件求和

    我目前有一个大型 SQL 语句 我将以下行添加到其中 以便获取每个交易 ID 的总现金 这是唯一的 select sum cash from Table a where a branch p branch and a transID p t
  • 视频流和 Android

    今天 对于我的一个应用程序 Android 2 1 我想从 URL 流式传输视频 就我探索的 Android SDK 而言 它非常好 我很喜欢almost它的每一个部分 但现在谈到视频流 我有点迷失了 如果您需要有关 Android SDK
  • Java 将 JFrame 附加到正在运行的应用程序窗口?

    如何将右上角的 JFrame 连接到另一个应用程序打开的窗口并在调整大小时保持不变 是否可以 这是我想要完成的任务的图表 谢谢您的帮助 如果这不可能 有其他选择吗 获取窗口大小 位置并相应设置我自己的 jframe 的方法 您要求 Java
  • 在具有不同 x-y 轴的面中绘制多个矩阵

    我从一组在线论坛收集了数据 并想使用 ggplot 和facets 每个论坛一个facet 绘制代表用户 A 回复用户 B 次数的矩阵 这是加载玩具示例的代码 library ggplot2 library dplyr df edges l
  • 互斥量在繁忙时被破坏

    EventHandler类有一个单例对象来接收来自主线程的事件 它将输入注册到向量 并创建一个运行 lambda 函数的线程 该函数在从向量中删除输入之前等待一段时间 以防止在一段时间内重复执行该输入的事件 但我在繁忙错误时遇到互斥体被破坏
  • 使用 MATLAB 进行数字图像处理,使用 3 种技术

    我有 MATLAB 作业 我必须使用 3 种图像处理技术 所以我应该制定一个任务 然后使用 3 种技术来解决它 例如 阈值处理 分割 形态学 恢复 直方图均衡 噪声消除 我需要一些想法以及如何解决它 你能帮助我吗 谢谢 版本中 我在某本书中
  • wsdl 中的“any”是什么以及如何使用 php 调用 wsdl 函数?

    这段代码是我的 wsdl 的一小部分 这里我没看懂
  • Pandas - 计算和旋转以获得前两年的收入

    我有一个如下所示的数据框 df pd DataFrame stud id 101 101 101 101 101 102 102 102 sub code CSE01 CSE01 CSE01 CSE01 CSE02 CSE02 CSE02