将一个小时的最后几分钟移动到循环文件的数据框顶部

Move last minutes of an hour to the top of a dataframe for files in a loop

我有多个包含两列的文件:一列用于分钟,另一列用于事件数。每个文件包含 19-22 分钟的数据。例如,我有 00:14、00:33、00:54、01:12... 每个文件的分钟数是随机的。 我写了一个代码来循环读取所有文件,然后重复相同的过程来处理它们,最后使用 pd.concat 合并它们。此代码工作正常,问题是,对于一个小时结束时的文件,最后一行是 45-59 分钟,第一行是 00-10 分钟,这是文件中已经出现的错误。像这样(分钟,事件):

00, 24711,
01, 24795,
02, 24507,
03, 24523,
04, 24460,
05, 24697,
06, 24482,
07, 24689,
08, 24504,
09, 24682,
10, 24763,
52, 24320,
53, 24605,
54, 24659,
55, 24705,
56, 24928,
57, 24718,
58, 24620,
59, 24704

如何确定这些文件的顺序并将其作为条件合并到循环中(如果分钟>40,则重新排序数据帧)? 我不太关心分钟列,所以我试图通过将零更改为 60,将零更改为 70 来保留顺序,但显然将 00 更改为 66,将 11 更改为 77:

counts.columns = ['Minute', 'Events']
mask = counts['Minute'].str[0] == '0'
counts.loc[mask, 'Minute'] = counts.loc[mask, 'Minute'].str.replace('0','6')
mask = counts['Minute'].str[0] == '1'
counts.loc[mask, 'Minute'] = counts.loc[mask, 'Minute'].str.replace('1','7')

我想在正确更改这些分钟后,我可以重新设置索引,它会自动将 40-59 分钟放在第一位,然后是 60-70 分钟。

我想到但似乎更复杂的另一个解决方案是匹配包含开始分钟的文件名,在分钟列中找到该数字并将其设为第一行但我不知道如何制作接下来的几分钟也到了顶部,我不明白 fnmatch 文档。

非常感谢您的帮助!

尝试以下方法:

counts["Minute"] = counts["Minute"].astype(int)
counts["Minute"] = counts["Minute"].where(counts["Minute"].gt(40), counts["Minute"].add(60))
counts = counts.sort_values("Minute")