【问题标题】:Pandas - For a given column value in a row return the value from the column which name matches the valuePandas - 对于行中的给定列值,返回名称与值匹配的列中的值
【发布时间】:2018-01-03 17:13:32
【问题描述】:

对于给定的PandasDataFrame 行,我如何使用一列中的值返回另一列的值,该列的名称是第一列中的值。例如

if row['column_name'] == 'col_A':
    return row['col_A']
if row['column_name'] == 'col_B':
    return row['col_B']

在知道 numpy 中的 agrmax 时,您会想到获取最大值的相同方式。例如

   import pandas as pd
   import numpy as np
   df = pd.DataFrame({'col_A': [1,2,3], 'col_B': [2,3,0]})

   df['col_C-max'] = df.apply(np.max, axis = 1)
   df['col_D-colum_name_of_max_value'] = df[['col_A', 
   'col_B']].apply(np.argmax, axis = 1)

在这种情况下,当只知道 col_A、col_B 和 col_D 时得到 col_C:

    col_A   col_B   col_C-max   col_D-colum_name_of_max_value
    0   1   2       2           col_B
    1   2   3       3           col_B
    2   3   0       3           col_A

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用 pandas 'fancy indexing' lookup,它将索引和列名配对,并为每一对选取一个值;在这种情况下,它将针对每个索引(行),它从col_D 中获取相应列下的值:

    df = pd.DataFrame({'col_A': [1,2,3], 'col_B': [2,3,0], 'col_D': ['col_B', 'col_B', 'col_A']})
    
    df['col_C'] = df.lookup(df.index, df.col_D)
    
    df
    # col_A  col_B  col_D   col_C
    #0    1      2  col_B   2
    #1    2      3  col_B   3
    #2    3      0  col_A   3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多