如何在查找数据框中两个列后返回第三列
比如,我有一个数据框(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
你可能想通过将 ColA
和 ColB
设置为索引来改变这个数据框。
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'