我有一个数据帧,对于每一列,我需要找到第一个值小于5的索引.我找到了一个解决方案,它对单个列表/序列有效here,但不能以"pythony"的方式将其应用于整个数据帧,而不通过for循环将每个列分解为自己的变量.

Data = pd.DataFrame({0: [2,2,3,2,2,3,5],
    1: [8,7,7,8,7,7,7],
    2: [9,7,7,4,4,4,9]})

期望输出为[0999,3],其中999是未找到值的标志<5.

next((x for x, val in enumerate(DataS) if val < 5),999)

但当我试图将其应用于所有专栏时,我无法使其发挥作用:

Data.apply(lambda x: next((x for x, val in enumerate(Data) if val < 5),999))

此代码为每列返回一个0值.有人能帮我理解为什么apply/lambda没有按照我认为他们应该的方式行事吗?

另外,此函数似乎也跳过了nan值.有没有其他方式来写这封信给flag nans?

推荐答案

让我们用idxmax来找到值的索引<;5,如果没有这样的值,则用999屏蔽索引<;5

m = df.lt(5)
m.idxmax().where(m.any(), 999)

0      0
1    999
2      3
dtype: int64

Python相关问答推荐

如何用symy更新分段函数

LAB中的增强数组

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

Polars LazyFrame在收集后未返回指定的模式顺序

如何根据参数推断对象的返回类型?

Python中的嵌套Ruby哈希

pandas滚动和窗口中有效观察的最大数量

avxspan与pandas period_range

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

如何根据一列的值有条件地 Select 前N组?

多处理队列在与Forking http.server一起使用时随机跳过项目

CommandeError:模块numba没有属性generated_jit''''

如何使regex代码只适用于空的目标单元格

try 检索blob名称列表时出现错误填充错误""

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

替换现有列名中的字符,而不创建新列

使用字典或列表的值组合

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

查找查找表中存在的列值组合