ToB企服应用市场:ToB评测及商务社交产业平台
标题:
pandas 关于日期排序部分利用小记
[打印本页]
作者:
用多少眼泪才能让你相信
时间:
2025-1-14 10:22
标题:
pandas 关于日期排序部分利用小记
项目场景:
对于商超逐日都会有许多收支流水,对于一些分店和总店一些导出流水格式不一。末了要将这些流水汇总后一起查对
题目形貌
以下是对于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 是翻转,属于倒序,正常就是默认顺序
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4