首页 > 解决方案 > 从其他列中的值获取列索引 nr

问题描述

我对 python 和 pandas 比较陌生,所以我可能对所有可能性没有完全理解,并且希望能得到提示如何解决以下问题:

我有一个df这样的:

    Jan  Feb  Mar  Apr  i    j
a   100  200  250  100  1  0.3
b   120  130   90  100  3  0.7
c    10   30   10   20  2 0.25

我想构造一个列,该列采用具有索引的列,df['i']然后将所选列中的值乘以 df['j']. 我想建立一个像这样的表(df['k']蜜蜂构造的列):

    Jan  Feb  Mar  Apr  i    j    k
a   100  200  250  100  1  0.3   60
b   120  130   90  100  3  0.7   70
c    10   30   10   20  2 0.25  2.5

(行a df['k']=200*0.3( df['Feb']*df['j'])、行b df['k']=100*0.7( df['Apr']*df['j']) 和行c df['k']=10*0.25( df['Mar']*df['j']))

in 的值df['i']将始终是一个整数值,所以我很想根据 in 的值使用列的位置df['i']

标签: pythonpandasnumpydataframe

解决方案


IIUC,DataFrame.rename然后我们可以使用DataFrame.lookupto map。最后我们使用Series.mul

df['k'] = df['j'].mul(df.rename(columns = dict(zip(df.columns,
                                                   range(len(df.columns)))))
                        .lookup(df.index, df['i']))
print(df)

输出

   Jan  Feb  Mar  Apr  i     j     k
a  100  200  250  100  1  0.30  60.0
b  120  130   90  100  3  0.70  70.0
c   10   30   10   20  2  0.25   2.5

选择:

df['j'].mul(df.iloc[:,df['i']].lookup(df.index, 
                                      df['i'].map(dict(zip(range(len(df.columns)),
                                                           df.columns)))))

推荐阅读