对于给定的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
答案 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