首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在pandas dataframe中选择行时如何保持顺序?

在pandas dataframe中选择行时如何保持顺序?
EN

Stack Overflow用户
提问于 2019-06-19 08:48:11
回答 6查看 7K关注 0票数 15

我想按列表中给定的特定顺序选择行。例如

此数据帧

代码语言:javascript
复制
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']的行,也就是说,首先是电视,然后是汽车,然后是电话。我试过这种方法,但它不能维持秩序

代码语言:javascript
复制
arr=['tv','car','phone']

df.loc[df['items'].isin(arr)]

   items  quantity
0    car         1
3     tv         5
4  phone         6
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-06-19 08:52:44

下面是一个使用Index.get_indexer的非侵入式解决方案,它不需要设置索引:

代码语言:javascript
复制
df.iloc[pd.Index(df['items']).get_indexer(['tv','car','phone'])]

   items  quantity
3     tv         5
0    car         1
4  phone         6

请注意,如果这将成为常见的事情(我所说的“索引”是指使用列上的列表进行“索引”),您最好将该列转换为索引。如果你对它进行排序,你会得到加分。

代码语言:javascript
复制
df2 = df.set_index('items')
df2.loc[['tv','car','phone']]  

       quantity
items          
tv            5
car           1
phone         6
票数 12
EN

Stack Overflow用户

发布于 2019-06-19 10:05:55

merge拯救了我们:

代码语言:javascript
复制
(pd.DataFrame({'items':['tv','car','phone']})
   .merge(df, on='items')
)

输出:

代码语言:javascript
复制
   items  quantity
0     tv         5
1    car         1
2  phone         6
票数 4
EN

Stack Overflow用户

发布于 2019-06-19 12:15:54

对于输入df中存在的所有要选择的项,这里有一个带有searchsorted的项,它的性能应该很好-

代码语言:javascript
复制
In [43]: sidx = df['items'].argsort()

In [44]: df.iloc[sidx[df['items'].searchsorted(['tv','car','phone'],sorter=sidx)]]
Out[44]: 
   items  quantity
3     tv         5
0    car         1
4  phone         6
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56658723

复制
相关文章

相似问题

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