我正在处理大型数据框(>100 000 行和多列)。我需要对数据框进行排序,然后将其分成预定义大小的相等大小的组。如果还有剩余的行(即,如果行数不能被组的大小整除),则需要从数据框中删除任何较小的组。
例如1, 2, 3, 4, 5, 6, 7, 8, 9, 10,组大小3
应分为[1, 2, 3]、[4, 5, 6]、[7, 8, 9]且10应丢弃。
我有一个解决方案,我可以使用创建一个新列
list(range(len(df.index) // group_size)) * group_size
Run Code Online (Sandbox Code Playgroud)
然后使用sort(), 和 将group_by()行分组在一起。之后我可以filter删除任何小于 的组group_size。
示例工作代码:
list(range(len(df.index) // group_size)) * group_size
Run Code Online (Sandbox Code Playgroud)
这非常有效。不幸的是,我有很大的数据框,并且运行时间太长。我的方法还有其他选择吗?
我有一些代码需要在 Windows 和 Linux 上做非常相似的事情。不幸的是,我需要几个特定于系统的功能(例如隐藏文件:Python 跨平台隐藏文件)。为可读性和可维护性编写代码的最佳方法是什么?
目前,代码使用许多if语句在不同平台上表现不同。我考虑过的另一种方法是将代码拆分为两个独立的函数,一个用于 Windows,一个用于 Linux,但这意味着在两个地方更新代码的主要部分。
请注意,代码的主要部分比这要长得多,也更复杂。
组合方法(最大的可维护性但有很多if语句):
import os
def sort_out_files():
if is_linux:
do_linux_preparations()
else:
do_windows_preparations()
# Main part of the code:
for file in os.listdir(folder):
if is_correct_file(file):
if is_linux:
do_main_actions_for_linux()
else:
do_main_actions_for_windows()
if is_linux:
do_linux_tidying_up()
else:
do_windows_tidying_up()
Run Code Online (Sandbox Code Playgroud)
单独的方法(需要更多的维护,但需要的if语句更少):
import os
def sort_out_files_linux():
do_linux_preparations()
# Main part of the code:
for file in os.listdir(folder):
if is_correct_file(file):
do_main_actions_for_linux()
do_linux_tidying_up()
def sort_out_files_windows():
do_windows_preparations()
# Main part of the code:
for …Run Code Online (Sandbox Code Playgroud)