Python 是否有一种矢量化的方式来访问另一列中明确指示的列的值?
我很抱歉,如果以前有人问过这个问题,这似乎很琐碎,但不知为什么我找不到答案 假设我有一个列(Python 是否有一种矢量化的方式来访问另一列中明确指示的列的值?,python,pandas,Python,Pandas,我很抱歉,如果以前有人问过这个问题,这似乎很琐碎,但不知为什么我找不到答案 假设我有一个列(选中的),其中包含另一列的名称(选项1,选项2,选项3,选项4): 因此,例如,对于第一行(id==0),所选列指示值存储在选项_4(即110.0)中,对于第二行,它存储在选项_2,等等 是否有一种矢量化方法(例如,不使用apply)可以获得一个新的系列(列),其中仅包含所选列中指示的值? 这似乎是一种常见的情况,我发现很难相信除了使用apply之外没有其他方法,特别是考虑到像and这样的方法正好以这种格
选中的
),其中包含另一列的名称(选项1
,选项2
,选项3
,选项4
):
因此,例如,对于第一行(id==0
),所选列指示值存储在选项_4
(即110.0)中,对于第二行,它存储在选项_2
,等等
是否有一种矢量化方法(例如,不使用apply)可以获得一个新的系列(列),其中仅包含所选列中指示的值?
这似乎是一种常见的情况,我发现很难相信除了使用apply之外没有其他方法,特别是考虑到像and这样的方法正好以这种格式返回列
如何使用apply实现结果的示例
使用:
使用:
@jesrael,我用了你的答案,注意到我的代码更慢了。经过一些测试后,我发现min
比lookup
更快(请参见a)。你知道我会错过什么吗?@toto_tico问得很难,我不是熊猫开发者。也许问题熊猫更适合于少数列和大量od行。@jesrael,我用了你的答案,注意到我的代码更慢。经过一些测试后,我发现min
比lookup
更快(请参见a)。你知道我会错过什么吗?@toto_tico问得很难,我不是熊猫开发者。对于少数列和大量od行,问题熊猫可能更为优化。
id option_1 option_2 option_3 option_4 selected
0 0 10.0 NaN NaN 110.0 option_4
1 1 NaN 20.0 200.0 NaN option_2
2 2 NaN 300.0 30.0 NaN option_3
3 3 400.0 NaN NaN 40.0 option_1
4 4 600.0 700.0 50.0 50.0 option_3
import pandas as pd
import numpy as np
df = pd.DataFrame({
'id': [0,1,2,3,4],
'option_1': [10, np.nan, np.nan, 400, 600],
'option_2': [np.nan, 20, 300, np.nan, 700],
'option_3': [np.nan, 200, 30, np.nan, 50],
'option_4': [110, np.nan, np.nan, 40, 50],
'selected': ['option_4','option_2','option_3','option_1','option_3']
})
df['value'] = df.apply(lambda x: x[x['selected']], axis=1)
df['value'] = df.lookup(df.index, df['selected'])
print (df)
id option_1 option_2 option_3 option_4 selected value
0 0 10.0 NaN NaN 110.0 option_4 110.0
1 1 NaN 20.0 200.0 NaN option_2 20.0
2 2 NaN 300.0 30.0 NaN option_3 30.0
3 3 400.0 NaN NaN 40.0 option_1 400.0
4 4 600.0 700.0 50.0 50.0 option_3 50.0