在Pandas中使用大型数据集的所有可能结果并对结果进行排序

我有一个数据帧,有700行和5100列。每行都包含真或假。使用此df,我想测试列的所有可能组合,并使用结果测试每行是否等于True。

前几天,我在这个帖子中得到了一位用户的极好帮助:如何在python中测试所有可能的组合与真/假陈述?,建议我使用itertools和“产品”中的“组合”。

这对于小型数据集工作正常。但是,当将此方法应用于我的(大得多的)数据集时,在测试超过2的组合时,内存不足。

我想要的输出与下面的示例类似,但我不会耗尽内存。

感谢您的任何帮助。

小数据集的建议方法:

import pandas as pd

from itertools import combinations


df1 = pd.DataFrame({"Main1": [True, False, False, False, False, True, True],

                    "Main2": [False, False, True, False, True, True, False],

                    "Main3": [True, False, True, True, True, True, False]})


df2 = pd.DataFrame({"Sub1": [False, False, True, False, True, False, True],

                    "Sub2": [False, True, False, False, True, False, True],

                    "Sub3": [True, False, True, False, False, False, True]})


df3 = df1.join(df2)


all_combinations = list(combinations(df3.columns, 2)) + \

                   list(combinations(df3.columns, 3))


for combination in all_combinations:


   df3["".join(list(combination))] = df3[list(combination)].product(axis=1).astype(bool)


df3.drop(labels=["Main1", "Main2", "Main3", "Sub1", "Sub2", "Sub3"], axis=1, inplace=True)







df3


   Main1Main2  Main1Main3  ...  Main3Sub2Sub3  Sub1Sub2Sub3

0       False        True  ...          False         False

1       False       False  ...          False         False

2       False       False  ...          False         False

3       False       False  ...          False         False

4       False       False  ...          False         False

5        True        True  ...          False         False

6       False       False  ...          False          True


MMTTMM
浏览 74回答 1
1回答

吃鸡游戏

所以,我并不为这个感到骄傲,但也许它有机会获胜 :)......我认为你需要离开数据帧,因为它不能长得足够大,无法正确保存你的结果。如果您的结果可预测地稀疏,则可以使用替代结构,如下所示。请注意,对于您正在做的事情来说,这将是一个很长的循环,22B x数据帧的长度,因此超过一万亿次命中,但是如果您只需要做一次,谁在乎。中的组合函数是一个生成器,因此它将具有内存效率。itertools我认为您正在寻找上面“全部为 True”的结果,因为您正在使用产品运算符。我在评论中说错了。如果完成,您可以在下面添加第二个循环来覆盖大小2的组合!:)import pandas as pdfrom itertools import combinationsdf = pd.DataFrame({ "Main1": [True, False, False, False, False, True, True],                    "Main2": [False, False, True, False, True, True, False],                    "Main3": [True, False, True, True, True, True, False],                    "Sub1": [False, False, True, False, True, False, True],                    "Sub2": [False, True, False, False, True, False, True],                    "Sub3": [True, False, True, False, False, False, True]})print(df)data = df.to_dict('index')# test to see if it looks right for row 0print(data[0])# now the data is in a nested dictionary, which should be more "iterable"results = []for combo in combinations(df.columns, 3):    for key in data:  # iterate through the rows in the data...  index is key.        values = set(data[key][col] for col in combo)        if all(values):            results.append((key, combo))# inspect results...for result in results:    print(f'row: {result[0]} columns: {results[1]} product is TRUE')收益 率:   Main1  Main2  Main3   Sub1   Sub2   Sub30   True  False   True  False  False   True1  False  False  False  False   True  False2  False   True   True   True  False   True3  False  False   True  False  False  False4  False   True   True   True   True  False5   True   True   True  False  False  False6   True  False  False   True   True   True{'Main1': True, 'Main2': False, 'Main3': True, 'Sub1': False, 'Sub2': False, 'Sub3': True}row: 5 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 0 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 6 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 6 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 6 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 2 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 4 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 4 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 2 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 4 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 2 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 4 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 2 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUErow: 6 columns: (0, ('Main1', 'Main3', 'Sub3')) product is TRUE[Finished in 0.6s]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python