根据另一列中给定的索引选择pandas DataFrame列

hyrbngr7  于 2023-04-18  发布在  其他
关注(0)|答案(2)|浏览(163)

给定一个 Dataframe ,如

df = pd.DataFrame({1: [10,20,30,40], 2: [50,60,70,80], 3: [90,100,110,120], "select": [2, 3, 1, 1])

我可以得到一系列的值,从每一行中选择想要的值,在每一行中选择对应于select列中给定的列索引的值,像这样:

df.apply(lambda r: r[r.select], axis=1)   # 50, 100, 30, 40

有没有一种不依赖于apply的更好的方法呢?

dxxyhpgq

dxxyhpgq1#

使用lookup

df.lookup(df.index, df['select'])

输出:

array([ 50, 100,  30,  40])
a8jjtwal

a8jjtwal2#

由于DataFrame.lookup不再可用,类似于以下内容(改编自文档)似乎是最好的方法:

def vlookup(df, lookup_series):
    idx, cols = lookup_series.factorize()
    return np.diag(df[cols].to_numpy()[:, idx])

print(vlookup(df, df["select"]))

相关问题