我需要创建一个DataFrame,其中包含n个原始数组的所有可能的唯一组合,这些组合有几个约束条件.我希望能够做到这一点,而不会因为内存限制而过滤掉初始数据帧.
将有两种类型的原始输入array.它们的布尔值将仅为True和False,或者它们将具有可变数量的浮点值.
另外一个棘手的问题是,任何行都应该只有一个非零浮点值,其他浮点值必须是0.
示例输入:
inputs = {
"a": [True, False],
"b": [True, False],
"c": [0.0, 0.1, 0.2],
"d": [0.0, 0.1, 0.2, 0.3],
}
bool_inputs = {"a", "b"}
float_inputs = {"c", "d"}
输出示例:
a b c d
0 True True 0.0 0.0
1 True False 0.0 0.0
2 False True 0.0 0.0
3 False False 0.0 0.0
4 True True 0.1 0.0
5 True False 0.1 0.0
6 False True 0.1 0.0
7 False False 0.1 0.0
8 True True 0.2 0.0
9 True False 0.2 0.0
10 False True 0.2 0.0
11 False False 0.2 0.0
12 True True 0.0 0.1
13 True False 0.0 0.1
14 False True 0.0 0.1
15 False False 0.0 0.1
16 True True 0.0 0.2
17 True False 0.0 0.2
18 False True 0.0 0.2
19 False False 0.0 0.2
20 True True 0.0 0.3
21 True False 0.0 0.3
22 False True 0.0 0.3
23 False False 0.0 0.3
我已经能够做到这一点,过滤数据事后与以下解决方案,但我不想有任何过滤.另外一个好处是不必修复列类型
import numpy as np
import pandas as pd
input_arrays = list(inputs.values())
results = np.array(np.meshgrid(*input_arrays)).T.reshape(-1, len(inputs))
df = pd.DataFrame(results, columns=list(inputs.keys()))
df[list(bool_inputs)] = df[list(bool_inputs)].astype(bool)
df = df[~(df[list(float_inputs)] > 0).all(axis=1)]
df = df.reset_index(drop=True)