按月计算 cumsum() 但如果该月没有数据则重复这些值

2023-12-28

我有数据:df

    date    col1    col2
0   1/16/2016   apple   20
1   2/1/2016    apple   40
2   2/2/2016    pear    60
3   3/13/2016   apple   10
4   5/4/2016    apple   50
5   6/15/2016   pear    5

With cumsum()我可以获得这些值的累积和。 但如果某个月没有值,则该值不重复。

df.set_index('date', inplace=True)
df = df.groupby([df.index.month, 'col1']).sum()
df['cumsum'] = df.groupby('col1')['cumsum'].cumsum()

date    col1    cumsum
Jan-16  apple   20
Feb-16  apple   60
Feb-16  pear    60
Mar-16  apple   70
May-16  apple   120
Jun-16  pear    65

但我想得到以下结果: 重复 cumsumcol1即使该特定月份没有数据,也会显示该值。

date    col1    cumsum
Jan-16  apple   20
Feb-16  apple   60
Feb-16  pear    60
Mar-16  apple   70
Mar-16  pear    60
Apr-16  apple   70
Apr-16  pear    60
May-16  apple   120
May-16  pear    60
Jun-16  apple   120
Jun-16  pear    65

在此先感谢您的帮助。


Use:

#create month period column  for correct ordering
df['months'] = df['date'].dt.to_period('m')
#aggregate month
df1 = df.groupby(['months', 'col1'])['col2'].sum()

#MultiIndex with all possible combinations
mux = pd.MultiIndex.from_product([pd.period_range(df['months'].min(),
                                                  df['months'].max(), freq='M'),
                                  df['col1'].unique()], names=df1.index.names)

#add missing values with reindex reshape, cumulative sum
#forward fill missing values and reshape back
df2 = (df1.reindex(mux)
          .unstack()
          .cumsum()
          .ffill()
          .stack()
          .astype(int)
          .reset_index(name='cumsum')
         )
print (df2)
     months   col1  cumsum
0   2016-01  apple      20
1   2016-02  apple      60
2   2016-02   pear      60
3   2016-03  apple      70
4   2016-03   pear      60
5   2016-04  apple      70
6   2016-04   pear      60
7   2016-05  apple     120
8   2016-05   pear      60
9   2016-06  apple     120
10  2016-06   pear      65

最后,如果需要,将日期时间转换为自定义字符串:

df2['months'] = df2['months'].dt.strftime('%b-%y')
print (df2)
    months   col1  cumsum
0   Jan-16  apple      20
1   Feb-16  apple      60
2   Feb-16   pear      60
3   Mar-16  apple      70
4   Mar-16   pear      60
5   Apr-16  apple      70
6   Apr-16   pear      60
7   May-16  apple     120
8   May-16   pear      60
9   Jun-16  apple     120
10  Jun-16   pear      65
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按月计算 cumsum() 但如果该月没有数据则重复这些值 的相关文章

随机推荐

  • Numpy 图像数组:如何有效地从 RGB 切换到 Hex

    我一直在使用嵌套 for 循环将 RGB 图像转换为十六进制值的图像数组 但对于大图像来说太慢了 有谁知道可以帮助我从 RGB 切换回 HEX 的快速方法和 或库 编辑 ragingSloth 这是我想出的 但对于我的需要来说太慢了 def
  • 如何在 Travis CI 上安装某些东西而不超时?

    我正在尝试测试 travis ci org 上构建的包 但 pip install scipy 遇到超时 Installing collected packages scipy Running setup py install for sc
  • 如何从 Excel 单元格获取完整值,而不是显示的(四舍五入)值?

    我在从工作表的单元格检索确切值时遇到问题 如果我打开文件 单元格有一个十进制数 仅显示 4 位小数 但如果我单击特定单元格 则该值会不同 有 6 位小数 我知道这是应用于单元格的设置 以便仅显示 4 位小数 现在我尝试使用 ClosedXM
  • WPF中如何移动焦点?

    我想知道是否有办法将焦点从当前控件移至 WPF 中 TabIndex 分配的控件上的其他控件 例子 我有 TabIndex 1 到 5 的控件 有没有办法将焦点从 1 跳转到 5
  • 从 C# 类设置 Gridview“标题”的样式

    我正在尝试在 C 文件中设置 ASP Net GridView 标题的样式 这是我返回样式化 GridView 的方法 private GridView setupGridView string caption var gview new
  • 检查context.Request.Body的条件是azure api管理策略中的JArray或JObject

    我正在使用 Azure API 管理策略表达式将供应商值发送到每个帖子 对后端 API 的放置和删除请求 我编写了一个代码 当请求类型为 JObject 时 该代码工作正常 但我有一些请求可以是 JArray 类型的情况 在这种情况下它会抛
  • 如何在IIS7中禁用应用程序池空闲超时?

    如果我将空闲超时设置为0 它会被禁用吗 是的 将空闲超时值设置为零将禁用空闲超时 奇怪的是 这没有记录在 MS 文档中 但我的证据来自 IIS 设置架构 如果您查看了 IIS 设置架构 C Windows System32 inetsrv
  • 如何安装:OpenSSL + WAMP

    这里有人有关于如何在我的本地开发计算机上获取 SSL 的清晰详细的步骤吗 我已在 c wamp 上安装了最新版本的 WAMP 2 2c 我在网上找到的说明在大多数情况下似乎已经过时 并且缺乏正确完成工作所需的详细信息 指南 WampServ
  • wl-pprint-extras 中的可选空格和多个替代项

    是否有一种好的 可接受的方法来获得两种以上的替代布局 特别是支持可选空间的方式 特别是 我可能想通过以下三种方式之一打印列表 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 按照该优先顺序 您可以先尝试一种替代方案 然后再尝试另
  • 从 FireWire 获取视频流

    我正在尝试通过 FireWire 将摄像机 Sony HVR Z1E 中的视频流式传输到我的计算机 传入的图片 流应由一些期望 CVMat 格式 来自 openCV 的函数进一步处理 好吧 我现在的问题是我不知道如何获取流 好吧 openC
  • Istio 分布式跟踪与 Jaeger 不起作用

    我正在尝试设置本地 k8s 集群minikube已安装istio我在使用 Jaeger 启用分布式跟踪时遇到问题 我有3个微服务A gt B gt C 我正在传播所需的所有标头 x request id x b3 traceid x b3
  • escapeshellarg 和 escapeshellcmd 有什么区别?

    PHP 有 2 个密切相关的函数 escapeshellarg http php net escapeshellarg and escapeshellcmd http php net escapeshellcmd 它们似乎都做类似的事情 即
  • super() 并更改协作方法的签名

    在多重继承设置中 例如所列出的 我该如何使用super 并处理层次结构中的类之间函数签名发生变化的情况 即我可以重写这个例子 在 python3 中 来使用super 例子取自文章super 被视为有害文章 https fuhm net s
  • 为什么在这个 Perl 示例中,defineed sdf 返回 true?

    我在 Perl 中尝试了这个例子 有人可以解释为什么这是真的吗 if defined sdf print true 它打印true sdf 可以是任何名称 另外 如果定义了 sdf 函数并且返回 0 则不会打印任何内容 print sdf
  • C++ 中的赋值运算符返回右值还是左值?

    C 中的赋值运算符返回右值还是左值 如果它是左值 那么两个参数中的哪一个将在这里递增 a b 它返回一个lvalue 根据第 5 17 条 赋值运算符 和复合赋值运算符 从右到左分组 全部都需要一个可修改的左值作为他们的左边 操作数并返回引
  • SQLServer连接预登录

    在 SQL Server 2000 中使用 Hibernate 时出现以下错误 Dec 12 2015 12 54 20 AM com microsoft sqlserver jdbc SQLServerConnection Prelogi
  • sys.dm_exec_sql_text 如何工作?

    你能解释一下原因吗 select from sys dm exec sql text sql handle 抛出错误 无效的列名 sql handle 但是 select from sys sysprocesses cross apply
  • 如何定义具有多个 OR 运算符的正则表达式,其中每个术语都包含空格前缀和后缀?

    我正在准备数据提取任务 我需要删除一组术语 每个源记录字符串中可以没有 部分或全部出现 有超过 100 000 条目标记录 我想避免执行单个术语匹配 替换操作 因为 a 要删除的术语列表可能会增长 并且 b 一次执行一个术语的当前匹配 替换
  • 如何在 R 中获得特定的彩色比例?

    我想使用看起来有点常见的色标 看看here https stackoverflow com questions 8421536 a true heat map in r and here http tctechcrunch2011 file
  • 按月计算 cumsum() 但如果该月没有数据则重复这些值

    我有数据 df date col1 col2 0 1 16 2016 apple 20 1 2 1 2016 apple 40 2 2 2 2016 pear 60 3 3 13 2016 apple 10 4 5 4 2016 apple