乐于分享
好东西不私藏

12行Python 代码搞定 Excel 分时段求和!告别加班,财务/运营人手必备

12行Python 代码搞定 Excel 分时段求和!告别加班,财务/运营人手必备

先看问题:
有一销售数据表,现需要根据自定义的时间段汇总出各“大类”的“成交金额”。自定义时间段长短不一、没有规律,比如0:00-5:00、5:00-5:30、5:30-6:30、6:30-12:00……22:30-24:00。
在Excel里处理这种非等宽、自定义的时间区间,是非常复杂的。传统方式是先把销售日期中的时间先提取出来,再换算成分钟,再通过函数嵌套或其他方式划分出不同的时间段,然后再插入透视表。如果有数据更新,还需要重复以上步骤。
再看高效解决方案:12行Python代码,一步到位解决问题
先上完整代码,后再逐行分析,保证零基础也能看得懂。
import pandas as pddf = pd.read_excel(r"E:\123123123.xlsx",sheet_name="Report")df = df.dropna(subset="大类")df['时间'] = pd.to_datetime(df.loc[:, "销售日期"], errors='coerce')df['总分钟数'] = df['时间'].dt.hour * 60 + df['时间'].dt.minutebins = [0300330,360,720,7808409001050,1230,1290,1350,1440]labels = ['0:00-5:00''5:00-5:30''5:30-:6:30''6:30-12:00',          '12:00-13:00''13:00-14:00','14:00-15:00','15:00-17:30',          '17:30-20:30','20:30-21:30','21:30-22:30','22:30-24:00']df['时间段'] = pd.cut(df['总分钟数'], bins=bins, labels=labels)result = pd.pivot_table(df,index="时间段",columns="大类",values="成交金额",aggfunc='sum').reset_index()result.to_excel(r"E:\123123123_汇总后.xlsx",index = False)
核心逻辑拆解共三步:
第一步、读数据
import pandas as pddf = pd.read_excel(r"E:\123123123.xlsx",sheet_name="Report")df = df.dropna(subset="大类")
pd.read_excel(r”E:\123123123.xlsx”,sheet_name=”Report”):使用pd.read_excel()读取”E:\123123123.xlsx”文件中名为”Report”的工作表。
df.dropna(subset=”大类”):的作用是删除“大类”中为空的无效数据。
第二步、打标签
df['时间'] = pd.to_datetime(df.loc[:, "销售日期"], errors='coerce')df['总分钟数'] = df['时间'].dt.hour * 60 + df['时间'].dt.minutebins = [0, 300, 330,360,720,780, 840, 900, 1050,1230,1290,1350,1440]labels = ['0:00-5:00''5:00-5:30''5:30-:6:30''6:30-12:00',          '12:00-13:00''13:00-14:00','14:00-15:00','15:00-17:30',          '17:30-20:30','20:30-21:30','21:30-22:30','22:30-24:00']df['时间段'] = pd.cut(df['总分钟数'], bins=bins, labels=labels)
pd.to_datetime(df.loc[:, “销售日期”], errors=’coerce’):把销售日期列转换成可计算的时间格式。errors=’coerce’能自动处理格式错误的单元格,使其转换为空值。
df[‘总分钟数’] = df[‘时间’].dt.hour * 60 + df[‘时间’].dt.minute:添加“总分钟数”辅助列,将销售时间转换成当天的总分钟数。
第4-6行:定义时间段的分钟区间和对应标签。bins是自定义的分钟区间,labels是每个区间的名称。
pd.cut(df[‘总分钟数’], bins=bins, labels=labels):按分钟区间给每条数据打上“时间段”的标签。pd.cut()会自动把每条数据的总分钟数匹配到对应的时间段标签里。pd.cut()方法还有一个默认参数:right=True,表示右闭合、左开放,如[0,5],表示0<x<=5;如果修改为rihgt=False则表示左闭合、右开放,如[0,5],表示0<=x<5。具体情况可根据实际调整。
第三步、汇总表

result = pd.pivot_table(df,index="时间段",columns="大类",values="成交金额",aggfunc='sum').reset_index()result.to_excel(r"E:\123123123_汇总后.xlsx",index = False)
pd.pivot_table(df,index=”时间段”,columns=”大类”,values=”成交金额”,aggfunc=’sum’).reset_index():相当于Python版的超级数据透视表。在这里,df是要汇总的表格;index=”时间段”是行索引,columns=”大类”是列标签,values=”成交金额”是要汇总的数值,aggfunc=’sum’是汇总的方式,reset_index()表示重新生成行索引。
result.to_excel(r”E:\123123123_汇总后.xlsx”,index = False):保存工作簿。
最后看效果:
方法用得对,时间我做主。咱们是不要成为专业的程序员,而是要用最简单高效的方法来解决问题。如果你也有类似的问题,不妨试试这段代码,不做表哥表姐,直接让工作效率翻倍。如果今天的分享对你有所启发,还请点赞+转发给身边朋友~~~

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 12行Python 代码搞定 Excel 分时段求和!告别加班,财务/运营人手必备

评论 抢沙发

6 + 4 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮