如何在查找数据框中两个列后返回第三列

2 投票
2 回答
33 浏览
提问于 2025-04-14 17:34

比如,我有一个数据框(df)长这样:

df2
ColA   ColB   ColC
 A       1     Bob
 A       2     Cat
 B       3     Hi

假设我在另一个数据框(df1)上使用循环,这次循环中我有 Val1 = 'A' 和 Val2 = '1'。我想要得到 'Bob' 这个值,并把它用在 df1 中。

这有点像 Excel 里的 vlookup,不过这里是用两列来查找。

我知道我可以把整个 df2 返回,但我只想要从 ColC 中获取一个值,前提是 ColA 和 ColB 的值要和我提供的 Val1 和 Val2 匹配,像这样:

df.loc[(df2['ColA'] == 'A') & (df2['ColB'] == '1')]

不过,我就是想要从 ColC 中返回这个单一的值 :|

2 个回答

0

你可能想通过将 ColAColB 设置为索引来改变这个数据框。

df = df.set_index(["ColA", "ColB"])
print(df)

输出结果是:

          ColC
ColA ColB     
A    1     Bob
     2     Cat
B    3      Hi

然后,要找到 ColC 的值 ('A', 1),你可以这样做:

print(df.loc[("A", 1), "ColC"])

输出结果是:

Bob

另一种可能的选择是将 df2 的值合并到 df1 中,但这要根据你的具体需求来决定。

0

一种选择:

Val1 = 'A'
Val2 = '1'

out = next(iter(df.loc[df['ColA'].eq(Val1) & df['ColB'].eq(Val2), 'ColC']), None)

或者,如果你确定只有一个匹配项:

out = df.loc[df['ColA'].eq(Val1) & df['ColB'].eq(Val2), 'ColC'].squeeze()

或者:

out = df.merge(pd.DataFrame([(Val1, Val2)], columns=['ColA', 'ColB'])
               )['ColC'].squeeze()

输出结果:'Bob'

撰写回答