首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas:根据一列的值打印另一列的值

Pandas:根据一列的值打印另一列的值
EN

Stack Overflow用户
提问于 2020-02-07 20:09:49
回答 1查看 1.5K关注 0票数 1

给定一个数据帧:

代码语言:javascript
复制
    Animal  wings   claws   horns
0   Ant     No      No      No
1   Bat     Yes     Yes     No
2   Cat     No      Yes     No

我正在尝试打印'Animal‘列的相应值,其中给定列的值是'Yes’。

Eg1:给定列为“claws”,输出应为Bat和Cat。

Eg2:给定列为“wings”,输出应为Bat

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-07 20:18:28

您可以分别筛选每一列-按DataFrame.set_indexAnimal转换为索引并按DataFrame.eq进行比较,然后按列名过滤并将索引转换为list:

代码语言:javascript
复制
df1 = df.set_index('Animal').eq('Yes')

print (df1.index[df1['wings']].tolist())
['Bat']
print (df1.index[df1['claws']].tolist())
['Bat', 'Cat']
print (df1.index[df1['horns']].tolist())
[]

或者使用字典理解创建字典也是可能的:

代码语言:javascript
复制
df1 = df.set_index('Animal').eq('Yes')

d = {col: df1.index[df1[col]].tolist() for col in df1}
print (d)
{'wings': ['Bat'], 'claws': ['Bat', 'Cat'], 'horns': []}

或者,如果需要分隔符,则添加join

代码语言:javascript
复制
d1 = {col: ','.join(df1.index[df1[col]]) for col in df1}
print (d1)
{'wings': 'Bat', 'claws': 'Bat,Cat', 'horns': ''}

或者,如果要过滤所有列,使其按Animal与索引串联,并按所有Yes值与分隔符,一起使用,请使用DataFrame.dot与转置DataFrame

代码语言:javascript
复制
df1 = df.set_index('Animal').eq('Yes')
s = df1.T.dot(df1.index + ',').str.strip(',')
print (s)
wings        Bat
claws    Bat,Cat
horns           
dtype: object

print (s['wings'])
Bat
print (s['claws'])
Bat,Cat
print (s['horns'])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60113235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档