ToB企服应用市场:ToB评测及商务社交产业平台

标题: pandas 关于日期排序部分利用小记 [打印本页]

作者: 用多少眼泪才能让你相信    时间: 2025-1-14 10:22
标题: pandas 关于日期排序部分利用小记


项目场景:

对于商超逐日都会有许多收支流水,对于一些分店和总店一些导出流水格式不一。末了要将这些流水汇总后一起查对

题目形貌

以下是对于Excel表单中日期顺序的大概性

缘故起因分析:

   对于Excel表格,尤其是日期中不含时分秒的环境,经常利用排序时会出现同一日期数据顺序错乱的环境
  原数据表                              错误排序后效果                    正确排序后效果        

错误排序和正确排序区别在于2024-01-01 00:00:00 对应的0101-1,0101-2,0101-3 的先后顺序。途中除源数据表,其余均为降序分列

办理方案:

   data = {“A”:"", "B":""}
  df = pd.DataFrame(data)
  # ascending=False 是降序
  # ascending=True 是升序
  1. # 1.对于一张Excel表中多日期(年月日 时分秒)按照正常时间正序或者倒序
  2. # 2.对于一张Excel表中单一某一天(年月日 时分秒)按照正常时间正序或者倒序
  3. # 注意这种方式不可以出现时分秒为00:00:00情况
  4. df.sort_values(by="A", inplace=True, ascending=False)
复制代码
  1. # 3.对于一张Excel表中多日期(年月日 时分秒)按照日期月份是指定顺序,按照日期是指定顺序
  2. # 4.对于一张Excel表中多日期(年月日 时分秒) 按照日期月份是乱序,按照日期是指定顺序
  3. # 7.对于一张Excel表中多日期(年月日)按照日期月份是指定顺序,按照日期是指定顺序
  4. # 8.对于一张Excel表中多日期(年月日)按照日期月份是乱序,按照日期是指定顺序
  5. # todo 新增Month列,并进行分组
  6. pd_deal['A_format'] = pd.to_datetime(pd_deal['A_format'])
  7. pd_deal['Month'] = pd.to_datetime(pd_deal['A_format']).dt.strftime("%Y-%m")
  8. # todo 遍历每一个月份,得到该月的日期
  9. for name, group in pd_deal.groupby('Month'):
  10.     # todo 得到月内去重后的日期,这一步很重要,pandas判断单调性的方法对于重复数据会判断失误,因此需要进行去重
  11.     dates_only = group['A_format'].dt.strftime("%Y-%m-%d").drop_duplicates()
  12.     df1 = pd_deal[pd_deal["Month"].isin([name])]
  13.     # todo 由于乱序或者日期非统一单调性因此,将月内全部日期按照索引删掉
  14.     index1 = df1.index.values.tolist()
  15.     pd_deal.drop(index=index1, inplace=True)
  16.     # todo 判断单调性 这种情况是某月内容只有一个日期
  17.     if dates_only.is_monotonic_decreasing and dates_only.is_monotonic_increasing:
  18.          df1['A_sfm'] = pd.to_datetime(df1['A']).dt.strftime("%H:%M:%S")
  19.          # todo 筛出并去掉时分秒为00:00:00
  20.          df2 = df1[~df1["A_sfm"].isin(["00:00:00"])]
  21.          # todo 将时分秒去重
  22.          only_day_data = df2['A_sfm'].drop_duplicates()
  23.          # todo 判断单调性(降序)
  24.          if only_day_data.is_monotonic_decreasing:
  25.               # todo 顺序翻转
  26.               df1 = df1.iloc[::-1]
  27.               df1.drop(["A_sfm"], axis=1, inplace=True)
  28.     # todo 判断单调性
  29.     elif dates_only.is_monotonic_decreasing:
  30.          df1 = df1.iloc[::-1]
  31.          pd_deal = pd_deal._append(df1)
  32. # todo 索引重新排序
  33. pd_deal.reset_index(inplace=True)
  34. pd_deal.drop(["Month", "A_format", "index"], axis=1, inplace=True)
复制代码
  1. # 5.对于一张Excel表中多日期(年月日) 按照正常时间正序或者倒序
  2. # 6.对于一张Excel表中单一某一天(年月日)按照正常时间正序或者倒序
  3. df= df.iloc[::-1]  # -1 是翻转,属于倒序,正常就是默认顺序
复制代码
 
 
 
 
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4