我想按照列表中给出的特定顺序选择行。例如
这个数据框
a=[['car',1],['bike',3],['jewel',2],['tv',5],['phone',6]]
df=pd.DataFrame(a,columns=['items','quantity'])
>>> df
items quantity
0 car 1
1 bike 3
2 jewel 2
3 tv 5
4 phone 6
我想获取具有此顺序的行['tv','car','phone']
,即先排电视,然后排汽车,最后排电话。我尝试过这种方法,但它不能维持秩序
arr=['tv','car','phone']
df.loc[df['items'].isin(arr)]
items quantity
0 car 1
3 tv 5
4 phone 6
这是一个非侵入式解决方案,使用Index.get_indexer https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Index.get_indexer.html这不涉及设置索引:
df.iloc[pd.Index(df['items']).get_indexer(['tv','car','phone'])]
items quantity
3 tv 5
0 car 1
4 phone 6
请注意,如果这将成为一种常见的事情(我的意思是用列上的列表“索引”),那么最好将该列转换为索引。如果你排序的话会有奖励积分。
df2 = df.set_index('items')
df2.loc[['tv','car','phone']]
quantity
items
tv 5
car 1
phone 6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)