python – 在Pandas DataFrame中查找第一列匹配条件的矢量化方法

python – 在Pandas DataFrame中查找第一列匹配条件的矢量化方法,第1张

概述假设我有以下pandas DataFrame: A B C0 0.548814 0.791725 0.9786181 0.715189 0.528895 0.7991592 0.602763 0.568045 0.4614793 0.544883 0.925597 0.7805294 0.423655 0.071036 0.1 假设我有以下pandas DataFrame:

A         B         C0  0.548814  0.791725  0.9786181  0.715189  0.528895  0.7991592  0.602763  0.568045  0.4614793  0.544883  0.925597  0.7805294  0.423655  0.071036  0.1182745  0.645894  0.087129  0.6399216  0.437587  0.020218  0.1433537  0.891773  0.832620  0.9446698  0.963663  0.778157  0.5218489  0.383442  0.870012  0.414662

可以使用以下代码创建:

import pandas as pdimport numpy as npsize = 10np.random.seed(0)keys = ["A","B","C"]df = pd.DataFrame({k: np.random.random(size) for k in keys})

如何找到符合给定条件的第一列?

在这种情况下,假设我的标准是我想要第一列,其中值小于某个p,比如0.5.如果没有列符合此条件,我想返回“不匹配”.

使用apply,这可以做到如下:

p = 0.5first = df.apply(    lambda row: next((x for i,x in enumerate(df.columns) if row[x]<p),"No Match"),axis=1)print(first)#0    No Match#1    No Match#2           C#3    No Match#4           A#5           B#6           A#7    No Match#8    No Match#9           A#dtype: object

是否有更有效(矢量化)的方法来做到这一点?我在想应该有一些方法使用argmax(),但我没有让它工作.

另外,我正在使用pandas 0.19.2而且我不确定我是否可以升级.

print(pd.__version__)#u'0.19.2'
解决方法 您可以使用NumPy argmax,但需要覆盖在给定行中从未满足您的条件的实例:

mask = df.lt(0.5)df['first'] = np.where(mask.any(1),df.columns[mask.values.argmax(1)],'No Match')

您也可以使用Pandas IDxmax:

df['first'] = np.where(mask.any(1),mask.IDxmax(1),'No Match')print(df)          A         B         C     first0  0.548814  0.791725  0.978618  No Match1  0.715189  0.528895  0.799159  No Match2  0.602763  0.568045  0.461479         C3  0.544883  0.925597  0.780529  No Match4  0.423655  0.071036  0.118274         A5  0.645894  0.087129  0.639921         B6  0.437587  0.020218  0.143353         A7  0.891773  0.832620  0.944669  No Match8  0.963663  0.778157  0.521848  No Match9  0.383442  0.870012  0.414662         A
总结

以上是内存溢出为你收集整理的python – 在Pandas DataFrame中查找第一列匹配条件的矢量化方法全部内容,希望文章能够帮你解决python – 在Pandas DataFrame中查找第一列匹配条件的矢量化方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存