Панды: Как построить столбец на основе другого столбца, который проиндексирован другим? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть этот кадр данных, представленный ниже.Я попробовал решение ниже, но я не уверен, что это хорошее решение.

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 голосов
/ 02 июня 2018

Вы можете попробовать с 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...