Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在pandas中查找符合条件的多列索引

如何在pandas中查找符合条件的多列索引
EN

Stack Overflow用户
提问于 2019-11-04 06:34:00
回答 1查看 33关注 0票数 1

对于给定的数据集:输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
d = pd.DataFrame({'option1': ['2', '3', '1', '1'], 'option2': ['3', '0', '1', '0'], 'option3': ['1', '1', '0', '0']})

我想创建一个新列,它遵循某个条件输出应包含新列:'occur': ['2', '1', '0', '0']

创建“发生”的条件是找到数字的第一个索引,它大于2 : 1 )假设option2列中的Row1: 3大于2,它的索引是第二位,因此row1的“发生”将显示2。2)对于第二行,option1是>2,因此“发生”显示为1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-04 06:37:49

首先将列转换为整数,通过条件>2进行比较,并通过numpy.argmax获取第一列的位置,但是对于set numpy.where,如果每行至少有一个True,则需要进行测试,因为如果不存在,每行的True将返回第一列:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
d = {'option1': ['2', '3', '1', '1'], 
     'option2': ['3', '0', '1', '0'], 
     'option3': ['1', '1', '0', '0']}
df = pd.DataFrame(d)

m = df.astype(int) > 2
df['occur'] = np.where(m.any(axis=1), np.argmax(m.values, axis=1) + 1, 0)
print (df)

  option1 option2 option3  occur
0       2       3       1      2
1       3       0       1      1
2       1       1       0      0
3       1       0       0      0

使用列名的Pandas解决方案与DataFrame.idxmax类似

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m = df.astype(int) > 2
df['occur'] = np.where(m.any(axis=1), m.idxmax(axis=1), 'not exist')
print (df)
  option1 option2 option3      occur
0       2       3       1    option2
1       3       0       1    option1
2       1       1       0  not exist
3       1       0       0  not exist

编辑:解决方案类似,只按DataFrame.iloc选择所有行,不带first

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
d = {'Name': ['a', 'b', 'c', 'd'], 
     'option1': ['2', '3', '1', '1'], 
     'option2': ['3', '0', '1', '0'], 
     'option3': ['1', '1', '0', '0']} 
df = pd.DataFrame(d)
print (df)
  Name option1 option2 option3
0    a       2       3       1
1    b       3       0       1
2    c       1       1       0
3    d       1       0       0

m = df.iloc[:, 1:].astype(int) > 2
df['occur'] = np.where(m.any(axis=1), np.argmax(m.values, axis=1) + 1, 0)
print (df)
  Name option1 option2 option3  occur
0    a       2       3       1      2
1    b       3       0       1      1
2    c       1       1       0      0
3    d       1       0       0      0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58688281

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文