给定一个数据帧:
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
发布于 2020-02-07 20:18:28
您可以分别筛选每一列-按DataFrame.set_index将Animal转换为索引并按DataFrame.eq进行比较,然后按列名过滤并将索引转换为list:
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'])https://stackoverflow.com/questions/60113235
复制相似问题