我需要将列表的每个值与df列的每个值进行比较,如果匹配,则取另一列的值。
我有几个循环使用iterrows,但代码运行起来需要很长时间。我想知道是否有更有效的方法可以做到这一点?loc似乎是一个很好的答案,但文档并不非常清楚如何使其适用于这个用例。
到目前为止,我的代码是
listy = []
for view in joined_views:
for row in df.iterrows():
if view == row[1]['other_view']:
listy.append(row[1]['other_column']
Pandas是为在一组数据中应用操作而构建的。当组操作不可用时,iterrows
是一个相对较慢的进程。在您的情况下,isin
将选择您想要的行,然后您可以获取另一列。
这可以写成
import pandas as pd
df = pd.DataFrame({"other_view":[1,2,3,4,5],
"other_column":["a", "b", "c", "d", "e"]})
joined_views = [1, 4, 100, 900, 1000]
listy = df[df.other_view.isin(joined_viewss)].other_column
print(listy)
或者,如果您喜欢将列命名为字符串
df[df["other_view"].isin(joined_views)]["other_column"]
换句话说,在joined_views中选择other_view所在的df行,然后取other_column值。