给定一个数据框:
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/