Pandas:如何基于另一列建立一个列,该列被另一个列索引?

时间:2018-06-01 21:03:52

标签: python-3.x pandas select

我的数据框如下所示。我尝试了下面的解决方案,但我不确定这是否是一个很好的解决方案。

import pandas as pd

def creatingDataFrame():

    raw_data = {'code': [1, 2, 3, 2 , 3, 3],                
                'Region': ['A', 'A', 'C', 'B' , 'A', 'B'],
                'var-A': [2,4,6,4,6,6],
                'var-B': [20, 30, 40 , 50, 10, 20],
                'var-C': [3, 4 , 5, 1, 2, 3]}
    df = pd.DataFrame(raw_data, columns = ['code', 'Region','var-A', 'var-B', 'var-C'])
    return df

if __name__=="__main__":


    df=creatingDataFrame()
    df['var']=np.where(df['Region']=='A',1.0,0.0)*df['var-A']+np.where(df['Region']=='B',1.0,0.0)*df['var-B']+np.where(df['Region']=='C',1.0,0.0)*df['var-C']    

我希望变量var假设列'var-A','var-B'或'var-C'的值取决于区域'Region'提供的区域。

结果必须是

df['var']
Out[50]: 
0     2.0
1     4.0
2     5.0
3    50.0
4     6.0
5    20.0
Name: var, dtype: float64

1 个答案:

答案 0 :(得分:1)

您可以尝试使用lookup

df.columns=df.columns.str.split('-').str[-1]
df
Out[255]: 
   code Region  A   B  C
0     1      A  2  20  3
1     2      A  4  30  4
2     3      C  6  40  5
3     2      B  4  50  1
4     3      A  6  10  2
5     3      B  6  20  3
df.lookup(df.index,df.Region)
Out[256]: array([ 2,  4,  5, 50,  6, 20], dtype=int64)

#df['var']=df.lookup(df.index,df.Region)