繁体   English   中英

Pandas - 对于一行中的给定列值,返回名称与值匹配的列中的值

[英]Pandas - For a given column value in a row return the value from the column which name matches the value

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

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

您可以使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM