gpt4 book ai didi

python - 是否有一种矢量化的方式来访问另一列中明确指示的列的值?

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:25 25 4
gpt4 key购买 nike

如果以前有人问过这个问题,我很抱歉,这看起来很微不足道,但不知何故我找不到答案。

假设我有一列 (selected),其中包含另一列的名称(option_1option_2option_3 , option_4):

    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

因此,例如,对于第 1 行 (id==0),selected 列表示该值存储在 option_4(即 110.0),对于第 2 行,它存储在 option_2 等中。

是否有一种矢量化方式(例如,不使用应用),我可以获得一个新系列(列),其中仅包含 selected 列中指示的值?

这似乎是一种常见的情况,我很难相信除了使用 apply 没有其他方法,特别是考虑到诸如 idxmin 之类的方法。和 idxmax准确返回该格式的列。


如何使用 apply 实现结果的示例

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)

最佳答案

使用DataFrame.lookup :

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

关于python - 是否有一种矢量化的方式来访问另一列中明确指示的列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51931137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com