使用列名获取列值

时间:2018-04-18 08:58:22

标签: python pandas dataframe

我有以下数据:

    production_type       type_a       type_b     type_c     type_d     
0             type_a     1.173783    0.714846    0.583621        1
1             type_b     1.418876    0.864110    0.705485        1
2             type_c     1.560452    0.950331    0.775878        1
3             type_d     1.750531    1.066091    0.870388        1
4             type_a     1.797883    1.094929    0.893932        1
5             type_a     1.461784    0.890241    0.726819        1
6             type_b     0.941938    0.573650    0.468344        1
7             type_a     0.507370    0.308994    0.252271        1
8             type_c     0.443565    0.270136    0.220547        1
9             type_d     0.426232    0.259579    0.211928        1
10            type_d     0.425379    0.259060    0.211504        1

我想创建一个新的列,列表或系列,以返回列的值。

输出

    production_type       type_a       type_b     type_c     type_d     Results 
0             type_a     1.173783    0.714846    0.583621        1     1.173783    
1             type_b     1.418876    0.864110    0.705485        1     0.864110    
2             type_c     1.560452    0.950331    0.775878        1     0.775878        
3             type_d     1.750531    1.066091    0.870388        1     1
4             type_a     1.797883    1.094929    0.893932        1     1.797883
5             type_a     1.461784    0.890241    0.726819        1     1.461784
6             type_b     0.941938    0.573650    0.468344        1     0.573650

基本上,如果在[production_type]列中写入type_a,我想在[结果]列中返回type_a的结果。

我尝试了以下内容:

for i in df:
    if i == 'type_a':
        print ('type_a')
    elif i == 'type_b':
        print ('type_b')
    elif i == 'type_c':
        print ('type_c')
    elif i == 'type_d':
        print ('type_d')
    else:
        print('')  
    print('')   

使用result.append

要生成数据帧,请使用以下命令:

list_cols = ['type_a','type_b','type_c']
df = pd.DataFrame(np.random.rand(10, 3), columns = list_cols )
df['production_type']= ['type_a','type_b','type_c','type_d','type_a','type_a','type_b'
                       ,'type_b','type_c','type_d']
 df['type_d'] = 1
 df['results'] = ''

有关搜索位置的任何提示?

3 个答案:

答案 0 :(得分:2)

您可以使用pd.DataFrame.apply

df['Results'] = df.apply(lambda row: row.get(row['production_type']), axis=1)

<强>解释

    带有pd.DataFrame.apply
  • axis=1将函数应用于每一行,并通过隐式循环提取每行的组件。
  • 该方法允许匿名lambda函数作为参数。
  • 我们可以定义lambda函数,以便从production_type列中提取所需的值。

答案 1 :(得分:1)

您可以尝试

result = list()
index =0
for i in df['production_type']:
    value = df[i][index]
    index = index+1
    result.append(value)

df['Results'] = pd.DataFrame(result)

答案 2 :(得分:1)

您可以通过传递map函数来使用lambda方法。

df['Results'] = df.index.map(lambda index : df[df['production_type'][index]][index])