Python 将数据帧列表示为其他列的线性组合

Python 将数据帧列表示为其他列的线性组合,python,dataframe,Python,Dataframe,我有一个包含10列数据和2000行的数据框。它还有其他需要忽略的列: df1 = pd.DataFrame(np.random.randint(0,100,size=(2000, 10)), columns=list('ABCDEFGHIJ')) df1['Company Name']=stringlist1 由于不同的文件具有不同的列名,列的名称可以在不同的运行中更改。唯一常见的是,要考虑的数据从第7列开始,接下来的10列开始。 我有几个列表,每个列表包含10个权重,其中一些为零,其他为非零

我有一个包含10列数据和2000行的数据框。它还有其他需要忽略的列:

df1 = pd.DataFrame(np.random.randint(0,100,size=(2000, 10)), columns=list('ABCDEFGHIJ'))
df1['Company Name']=stringlist1
由于不同的文件具有不同的列名,列的名称可以在不同的运行中更改。唯一常见的是,要考虑的数据从第7列开始,接下来的10列开始。 我有几个列表,每个列表包含10个权重,其中一些为零,其他为非零,加起来等于1。例如:

wt1=[0.0,0.34,0.05,0.0,0.1,0.01,0.0,0.0,0.5,0.0]
我需要定义一个新的df1列,它是10列的线性组合,权重在wt1中指定

我该怎么做?请注意,列的名称(ABCD…)不能出现在求和表达式中,因为上面的代码需要可用于列名可能不同的数据(它们是从Excel工作表中读取的)

我试过:

icollist1=[icol1 for icol1,val1 in enumerate(wt1) if val1>0.0]
for icol1 in icollist1:
    df1['Weighted Sum']+=np.asarray(wt1[icol1])*df1[colnames1[icol1]]
其中colnames1是从读取此数据框的Excel文件中提取的列列表

我发现错误:

TypeError: can't multiply sequence by non-int of type 'float'
...
During handling of the above exception, another exception occurred:
...
TypeError: can't multiply sequence by non-int of type 'float'

请将此作为您提供的示例

df1 = pd.DataFrame(np.random.randint(0,100,size=(2000, 10)), columns=list('ABCDEFGHIJ'))
wt1=[0.0,0.34,0.05,0.0,0.1,0.01,0.0,0.0,0.5,0.0]

df1.mul(wt1, axis=1).sum(axis=1)
如果您有超过10列,并且希望从第7列开始增加多个列:

df1 = pd.DataFrame(np.random.randint(0,100,size=(2000, 20)))
wt1=[0.0,0.34,0.05,0.0,0.1,0.01,0.0,0.0,0.5,0.0]
df1.iloc[:,6:16].mul(wt1, axis=1).sum(axis=1)


如果我的dataframe有其他不需要相乘的列,那么这种情况会发生什么变化。请参阅更新的示例。但您需要知道要乘哪一列,是前10列吗?请参阅其他详细信息。从第7列到第16列。我只是为了另一个例子修改了它。谢谢。iloc的参数可以是索引列表吗?