python - Pandas:根据另一列的值打印一列的值

标签 python pandas

给定一个数据框:

    Animal  wings   claws   horns
0   Ant     No      No      No
1   Bat     Yes     Yes     No
2   Cat     No      Yes     No

我正在尝试打印“动物”列的相应值,其中给定列的值为"is"。

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

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

最佳答案

您可以单独过滤每一列 - 将 Animal 转换为 DataFrame.set_index 索引并按 DataFrame.eq 进行比较,然后按列名称过滤并将索引转换为列表:

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())
[]

或者可以使用字典理解创建字典:

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:

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

或者,如果想要将所有列过滤为系列,索引为 Animal,值则为所有带有分隔符 Yes 值, 使用 DataFrame.dot使用转置DataFrame:

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'])

关于python - Pandas:根据另一列的值打印一列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60113235/

相关文章:

python - Pandas:将一列分解为多行

python - 如何舍入仅在 Pandas 中显示的值,同时将原始值保留在数据框中?

当进程是守护进程时,python 的多处理模块的 join()

python - 创建 |N| x |M|来自哈希表的矩阵

python - 如何在 matplotlib 中设置纵横比?

python - 如果未定义索引操作返回 View 还是副本, Pandas 的观点是什么?

python - 如何在网络服务器中运行 Selenium 脚本?

python - pandas 两个数据框多列值比较

python - Pandas 应用 Idmax 错误地将混合对象列转换为 float

python - 如何使用列共享项目的百分比创建新的 pandas DataFrame