程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了需要统计下个月第15天到第15天的操作总和大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决需要统计下个月第15天到第15天的操作总和?

开发过程中遇到需要统计下个月第15天到第15天的操作总和的问题如何解决?下面主要结合日常开发的经验,给出你关于需要统计下个月第15天到第15天的操作总和的解决方法建议,希望对你解决需要统计下个月第15天到第15天的操作总和有所启发或帮助;

我需要对自每月第 15 天以来每个时期的浮动日期的值求和,例如。 15.10-14.11、15.11-14.12 等,按每对 ID-dp_ID 分组。

我的df

  date        ID      dp   value
  2020-11-13  300000  002  500,00  
  2020-11-14  352575  001  400,00
  2020-11-15  352575  001  100,00
  2020-11-16  352575  001  500,00
  ...............................
      `days from 17.11-12.14`
  ...............................
  2020-12-15  300000  002  700,00
  2020-12-16  352575  001  200,00
  2020-12-17  352575  001  500,00
  2020-12-18  352575  002  600,00

预期输出表,但不是严格的变体: 如何在输出中标记这个时期并不重要 对于前 2020-11-01 可能意味着 15.10-14.11

  period      ID      dp   value
  2020-11-01  300000  002  500,00  
  2020-11-01  352575  001  400,00
  2021-11-01  352575  002  1000,00
  2020-12-01  300000  002  700,00
  2020-12-01  352575  001  700,00
  2020-12-01  352575  002  600,00
  ...............................

我已经尝试通过石斑鱼方法解决问题,但对我不起作用

def grouper(X):
   d = x.rename('date').to_frame().reset_index()
   return d.groupby(pd.Grouper(key='date',freq='M',origin='start')).cumsum()

df['sum'] = df.groupby(['ID','dp'])['date'].transform(grouper)

解决方法

IIUC,这是另一种选择:

df['custom_period'] = (df.index.day == 15 - 1).cumsum()  # Begin on every 15th
df['value'] = df.groupby(['custom_period','id','dp'])['value'].transform('cumsum')
df.drop('custom_period',axis=1,inplace=TruE)

输出:

                id  dp  value
date                         
2020-11-13  300000   2    500
2020-11-14  352575   1    400
2020-11-15  352575   1    500
2020-11-16  352575   1   1000
2020-12-15  300000   2    700
2020-12-16  352575   1   1200
2020-12-17  352575   1   1700
2020-12-18  352575   2    600
,

首先,您需要创建一个包含年份和月份的列。年份和月份必须基于每月的 15 日至 14 日。从 15 日到 31 日的任何值都应属于下个月。为此,请使用 pd.DateOffset(months=1) 将值增加到下个月。您可以使用 df.date.dt.day 获取日期的日期部分。检查它是否大于 14。如果是,则将月份移动 1。

既然您在另一列中有了年月,请使用它来分组。如果您希望每一行都有值,请使用 groupby.transform()。如果您只需要摘要,请使用 .sum()

这是获取每行总和的代码。

c = ['date','dp','value']

d = [['2020-11-13',300000,'002',500.00],['2020-11-14',352575,'001',400.00],['2020-11-15',100.00],['2020-11-16',['2020-12-15',700.00],['2020-12-16',200.00],['2020-12-17',['2020-12-18',600.00]]

import pandas as pd
df = pd.DataFrame(d,columns=C)

df['date'] = pd.to_datetiR_804_11845@e(df['date'])

df['Year-Mon'] = df.date.dt.strftime('%Y-%m')

#
df.loc[df.date.dt.day > 14,'Year-Mon'] = (df.date + pd.DateOffset(months=1)).dt.strftime('%Y-%m')

df['sum'] = df.groupby(['id','Year-Mon'])['value'].transform('sum')
print (df)

输出结果为:

        date      id   dp  value Year-Mon    sum
0 2020-11-13  300000  002  500.0  2020-11  500.0
1 2020-11-14  352575  001  400.0  2020-11  400.0
2 2020-11-15  352575  001  100.0  2020-12  600.0
3 2020-11-16  352575  001  500.0  2020-12  600.0
4 2020-12-15  300000  002  700.0  2021-01  700.0
5 2020-12-16  352575  001  200.0  2021-01  700.0
6 2020-12-17  352575  001  500.0  2021-01  700.0
7 2020-12-18  352575  002  600.0  2021-01  600.0

大佬总结

以上是大佬教程为你收集整理的需要统计下个月第15天到第15天的操作总和全部内容,希望文章能够帮你解决需要统计下个月第15天到第15天的操作总和所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: