Pandas是快速遍历行的最佳方式



我需要将列表的每个值与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值。

最新更新