python - 将函数应用于数据框以创建列表的矢量化方式
问题描述
我见过几个这样的问题
矢量化替代 iterrows, 更快替代 iterrows,Pandas:替代 iterrow 循环, for 循环在 pandas 中使用 iterrows,python:使用 .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()]
我正在尝试做的事情:
上述更快和矢量化的形式。
解决方案
问题实际上不是关于如何遍历 aDataFrame
并返回一个列表,而是如何将函数应用于DataFrame
by 列中的值。
您可以使用pandas.DataFrame.apply
设置axis
为1
:
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()
推荐阅读
- react-native - 如何在 React Native 中仅接受对视图某些区域的触摸?
- php - 为什么我在“字段列表”中获得主键值的未知列?[PHP + MySQL]
- kotlin - 带有可选字段的 Kotlin DSL
- python - Python 错误:ValueError:对已关闭文件的 I/O 操作?下面的代码
- java - Java 节流的“消费者”线程
- docker - docker:使正在运行的容器的文件夹持久化
- excel - 重试在 excel 2010 中为散点图设置数据标签时出现对象错误 - 下面的代码出了什么问题?
- javascript - 没有按钮的文本框。如果您键入一些字母并按“Enter”,则在 1 秒后出现带有文本框文本的警报对话框
- python - PySpark UDF,输入端只有 None 值
- android - Android Kotlin - WebView 显示空白页