首页 > 解决方案 > 将函数应用于数据框以创建列表的矢量化方式

问题描述

我见过几个这样的问题

矢量化替代 iterrows更快替代 iterrowsPandas:替代 iterrow 循环for 循环在 pandas 中使用 iterrowspython:使用 .iterrows() 创建列Iterrows 性能。但似乎每个人都是一个独特的案例,而不是一种普遍的方法。

我的问题也是关于.iterrows

我正在尝试将第一行和第二行传递给一个函数并从中创建一个列表。

是)我有的:

我有一个带有两列的 pandas DataFrame,看起来像这样。

         I.D         Score
1         11          26
3         12          26
5         13          26
6         14          25

我做了什么:

其中术语Point是我之前定义的函数。

my_points = [Points(int(row[0]),row[1]) for index, row in score.iterrows()]

我正在尝试做的事情:

上述更快和矢量化的形式。

标签: pythonpandas

解决方案


问题实际上不是关于如何遍历 aDataFrame并返回一个列表,而是如何将函数应用于DataFrameby 列中的值。

您可以使用pandas.DataFrame.apply设置axis1

df.apply(func, axis=1)

要放入列表,这取决于您的函数返回的内容,但您可以:

df.apply(Points, axis=1).tolist()

如果您只想应用于某些列:

df[['Score', 'I.D']].apply(Points, axis=1)

如果您想申请一个func需要多次args使用numpy.vectorize以提高速度的应用程序:

np.vectorize(Points)(df['Score'], df['I.D'])

lambda

df.apply(lambda x: Points(x['Score'], x['I.D']), axis=1).tolist()

推荐阅读