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中查找第一列匹配条件的矢量化方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)