问题:我有一个表,我需要在其中提取行(或列,如果我转置表)的所有有效组合。列中只有值“+”或“-”,并且当组合中的至少一行中有“+”时,组合被认为是有效的,也就是说,所有行中带有“-”的任何组合都是无效的。
示例表:
Guns P_01 P_02 P_03 P_04 P_05 P_06 P_07
0 G_01 + - + + + - +
1 G_02 + + + - + + -
2 G_03 - - - + + + +
3 G_04 + + + - - - -
4 G_05 + + + - - - -
5 G_06 - - - + + + +
6 G_07 + + + - - - -
有效组合示例:
0 G_01 + - + + + - +
1 G_02 + + + - + + -
无效组合示例:
3 G_04 + + + - - - -
4 G_05 + + + - - - -
为了获得所有组合,我尝试使用 itertools 组合,并将结果放入列表中:
dfcomb = []
dfcomb = df.apply(lambda r: list(combinations(r, 2)), axis=0)
Output:
Guns P_01 P_02 P_03 P_04 P_05 P_06 P_07
0 (G_01, G_02) (+, +) (-, +) (+, +) (+, -) (+, +) (-, +) (+, -)
1 (G_01, G_03) (+, -) (-, -) (+, -) (+, +) (+, +) (-, +) (+, +)
2 (G_01, G_04) (+, +) (-, +) (+, +) (+, -) (+, -) (-, -) (+, -)
3 (G_01, G_05) (+, +) (-, +) (+, +) (+, -) (+, -) (-, -) (+, -)
4 (G_01, G_06) (+, -) (-, -) (+, -) (+, +) (+, +) (-, +) (+, +)
5 (G_01, G_07) (+, +) (-, +) (+, +) (+, -) (+, -) (-, -) (+, -)
6 (G_02, G_03) (+, -) (+, -) (+, -) (-, +) (+, +) (+, +) (-, +)
7 (G_02, G_04) (+, +) (+, +) (+, +) (-, -) (+, -) (+, -) (-, -)
8 (G_02, G_05) (+, +) (+, +) (+, +) (-, -) (+, -) (+, -) (-, -)
9 (G_02, G_06) (+, -) (+, -) (+, -) (-, +) (+, +) (+, +) (-, +)
10 (G_02, G_07) (+, +) (+, +) (+, +) (-, -) (+, -) (+, -) (-, -)
11 (G_03, G_04) (-, +) (-, +) (-, +) (+, -) (+, -) (+, -) (+, -)
12 (G_03, G_05) (-, +) (-, +) (-, +) (+, -) (+, -) (+, -) (+, -)
13 (G_03, G_06) (-, -) (-, -) (-, -) (+, +) (+, +) (+, +) (+, +)
14 (G_03, G_07) (-, +) (-, +) (-, +) (+, -) (+, -) (+, -) (+, -)
15 (G_04, G_05) (+, +) (+, +) (+, +) (-, -) (-, -) (-, -) (-, -)
16 (G_04, G_06) (+, -) (+, -) (+, -) (-, +) (-, +) (-, +) (-, +)
17 (G_04, G_07) (+, +) (+, +) (+, +) (-, -) (-, -) (-, -) (-, -)
18 (G_05, G_06) (+, -) (+, -) (+, -) (-, +) (-, +) (-, +) (-, +)
19 (G_05, G_07) (+, +) (+, +) (+, +) (-, -) (-, -) (-, -) (-, -)
20 (G_06, G_07) (-, +) (-, +) (-, +) (+, -) (+, -) (+, -) (+, -)
但现在我陷入困境,我知道我应该使用循环来验证任何组合是否有效,但我该怎么做呢?