项目场景:
对于商超每日都会有很多收支流水,对于一些分店和总店一些导出流水格式不一。最后要将这些流水汇总后一起核对
问题描述
以下是对于Excel表单中日期顺序的可能性
- 对于一张Excel表中多日期(年月日 时分秒)按照正常时间正序或者倒序
- 对于一张Excel表中单一某一天(年月日 时分秒)按照正常时间正序或者倒序
- 对于一张Excel表中多日期(年月日 时分秒)按照日期月份是指定顺序,按照日期是指定顺序
- 对于一张Excel表中多日期(年月日 时分秒) 按照日期月份是乱序,按照日期是指定顺序
- 对于一张Excel表中多日期(年月日) 按照正常时间正序或者倒序
- 对于一张Excel表中单一某一天(年月日)按照正常时间正序或者倒序
- 对于一张Excel表中多日期(年月日)按照日期月份是指定顺序,按照日期是指定顺序
- 对于一张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.对于一张Excel表中多日期(年月日 时分秒)按照正常时间正序或者倒序
# 2.对于一张Excel表中单一某一天(年月日 时分秒)按照正常时间正序或者倒序
# 注意这种方式不可以出现时分秒为00:00:00情况
df.sort_values(by="A", inplace=True, ascending=False)
# 3.对于一张Excel表中多日期(年月日 时分秒)按照日期月份是指定顺序,按照日期是指定顺序
# 4.对于一张Excel表中多日期(年月日 时分秒) 按照日期月份是乱序,按照日期是指定顺序
# 7.对于一张Excel表中多日期(年月日)按照日期月份是指定顺序,按照日期是指定顺序
# 8.对于一张Excel表中多日期(年月日)按照日期月份是乱序,按照日期是指定顺序
# todo 新增Month列,并进行分组
pd_deal['A_format'] = pd.to_datetime(pd_deal['A_format'])
pd_deal['Month'] = pd.to_datetime(pd_deal['A_format']).dt.strftime("%Y-%m")
# todo 遍历每一个月份,得到该月的日期
for name, group in pd_deal.groupby('Month'):
# todo 得到月内去重后的日期,这一步很重要,pandas判断单调性的方法对于重复数据会判断失误,因此需要进行去重
dates_only = group['A_format'].dt.strftime("%Y-%m-%d").drop_duplicates()
df1 = pd_deal[pd_deal["Month"].isin([name])]
# todo 由于乱序或者日期非统一单调性因此,将月内全部日期按照索引删掉
index1 = df1.index.values.tolist()
pd_deal.drop(index=index1, inplace=True)
# todo 判断单调性 这种情况是某月内容只有一个日期
if dates_only.is_monotonic_decreasing and dates_only.is_monotonic_increasing:
df1['A_sfm'] = pd.to_datetime(df1['A']).dt.strftime("%H:%M:%S")
# todo 筛出并去掉时分秒为00:00:00
df2 = df1[~df1["A_sfm"].isin(["00:00:00"])]
# todo 将时分秒去重
only_day_data = df2['A_sfm'].drop_duplicates()
# todo 判断单调性(降序)
if only_day_data.is_monotonic_decreasing:
# todo 顺序翻转
df1 = df1.iloc[::-1]
df1.drop(["A_sfm"], axis=1, inplace=True)
# todo 判断单调性
elif dates_only.is_monotonic_decreasing:
df1 = df1.iloc[::-1]
pd_deal = pd_deal._append(df1)
# todo 索引重新排序
pd_deal.reset_index(inplace=True)
pd_deal.drop(["Month", "A_format", "index"], axis=1, inplace=True)
# 5.对于一张Excel表中多日期(年月日) 按照正常时间正序或者倒序
# 6.对于一张Excel表中单一某一天(年月日)按照正常时间正序或者倒序
df= df.iloc[::-1] # -1 是翻转,属于倒序,正常就是默认顺序

688

被折叠的 条评论
为什么被折叠?



