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

时间:2017-07-27 19:50:53

标签: python pandas dataframe

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

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

当你知道numpy中的agrmax时,你会想到获得最大值的方式。 E.g。

   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

1 个答案:

答案 0 :(得分:1)

您可以使用pandas '花式索引' lookup,它将索引和列名称配对,并为每对选取一个值;在这种情况下,它将针对每个索引(行),从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 获取相应列下的值:

1. NBC997
2. EVO463
3. EVO426
4. EVO420
5. EVO826
6. EVO820
7. EVO863
8. CRO001
9. BCA915
10. SBH121
11. KEN500
12. GAM201
13. GAM1011
14. GAM101
15. SPR577
16. SPR580
17. SPR579
18. SPR576
19. DON201
20. MOR101