You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Pandas DataFrame每行首个值为1的元素的位置索引

嗨,很高兴能帮到你!这里有几种简单的方法可以实现你想要的效果,让每行新增一列显示第一个1的位置:

方法1:利用eq()和idxmax()(推荐,效率高)

这是最简洁高效的方式,因为idxmax()会默认返回第一个最大值的位置,我们先把数据转换成布尔值后,True就是我们要找的目标:

import pandas as pd
a = [[1,0,0,1],[0,1,0,1],[0,0,0,1]]
df = pd.DataFrame(a)

# 新增列,获取每行第一个1的列索引
df['New'] = df.eq(1).idxmax(axis=1)

print(df)

运行后就会得到你期望的结果:

0  1  2  3  New
0  1  0  0  1    0
1  0  1  0  1    1
2  0  0  0  1    3

方法2:用apply()自定义逻辑

如果需要更灵活的筛选逻辑(比如行里有大于1的数值,但你只关心1的位置),可以用apply()逐行处理:

df['New'] = df.apply(lambda row: row[row == 1].index[0], axis=1)

不过这种方法在处理大型数据集时效率会低一些,小数据场景用没问题。

方法3:借助NumPy的argmax()(大数据集首选)

如果你的DataFrame数据量很大,用NumPy的方法速度会更快:

import numpy as np
df['New'] = np.argmax(df.values == 1, axis=1)

它的原理和方法1类似,都是找第一个符合条件的位置,但底层是NumPy的运算,速度更优。

放心用这些方法就好,结果完全符合你的需求~

内容的提问来源于stack exchange,提问作者Geowol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:42:10