首页 > 解决方案 > 熊猫:如何基于另一列索引的另一列构建一列?

问题描述

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

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

标签: python-3.xpandasselect

解决方案


你可以试试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)

推荐阅读