Python 转换Numpy数组,将值传递给函数

Python 转换Numpy数组,将值传递给函数,python,numpy,Python,Numpy,我正在尝试获取一个numpy数组,并将其输入到约束问题中 我正在使用的表格如下所示: Type1 2 3 4 5 6 A 0 1 1 0 1 1 B 0 1 1 0 1 1 C 0 0 1 1 1 1 D 0 0 1 1 1 1 E 1 1 1 1 0 1 F 1 1 1 1 1 1 当我将表转换为数组时,我尝试做两件事: 1) 再

我正在尝试获取一个numpy数组,并将其输入到约束问题中

我正在使用的表格如下所示:

Type1   2   3   4   5   6
A   0   1   1   0   1   1
B   0   1   1   0   1   1
C   0   0   1   1   1   1
D   0   0   1   1   1   1
E   1   1   1   1   0   1
F   1   1   1   1   1   1
当我将表转换为数组时,我尝试做两件事:

1) 再添加6列(标题7、8、9、10、11和12)。对于每种类型(A、B、C等),新列的第1-6列的值将完全相同

2) 对于每种类型,我都试图将值传递到约束方法中。例如,我想传递(x,y),其中x是类型(“a”),y是value=1的列。换句话说,第一个(x,y)是(“a”,[2,3,5,6,8,9,11,12])

(对于步骤#1,如果我能够将6添加到现有的“真”值第1-6列中,则可能没有必要创建第7-12列)


我尝试过使用nditer,但我不知道如何在nditer中保留“Type”,对值进行布尔检查,然后传递列名?我想我甚至不会使用列名,而只是使用一个计数器来计算y变量。

您可以使用下面的apply和tile来实现
np.tile
函数使用布尔索引重复数组

df=pd.DataFrame([[A',0,1,1,0,1,1],'B',0,1,1,1,1,1],'C',0,0,1,1,1,1],'D',0,0,1,1,1,1,1,1,1,1,1,1,1,1],'F',1,1,1,1,1,1,1],('Type','1','2','3','4','5','6'))
def约束(x,y):
打印(“x:,x)
打印(“y:,y”)
返回x
df.apply(lambda行:约束(行[0],np.arange(2*len(行[1:]))[np.tile((行[1:==1),2)]+1),轴=1)
或者像下面这样使用循环

范围内的i(len(df)):
行=df.iloc[i]
约束(第[0]行,np.arange(2*len(第[1]行))[np.tile((第[1::==1)行,第2)]+1)

忘记
nditer
;它是一个专门的迭代器,在开发编译代码时比通用的
numpy
work更有用<代码>列名不适用于
numpy
。行和列是通过位置索引而不是名称来标识的。您能后退一步并提供更多的解释吗?你在这里更大的目标是什么?当你说“如果我有能力在现有的基础上增加6…”时,你的数据存储在数据框中是什么意思?为什么有一个名为“Type”的列,可以更改吗?你所有的值是0还是1,它们代表布尔值?