Sorting 在一个单独的表上排序而不合并结果?
我有以下数据:Sorting 在一个单独的表上排序而不合并结果?,sorting,join,pandas,dataframe,Sorting,Join,Pandas,Dataframe,我有以下数据: fruit = pd.DataFrame({'fruit': ['apple', 'orange', 'apple', 'blueberry'], 'colour': ['red', 'orange', 'green', 'black']}) costs = pd.DataFrame({'fruit': ['apple', 'orange', 'blueberry'], 'cost': [
fruit = pd.DataFrame({'fruit': ['apple', 'orange', 'apple', 'blueberry'],
'colour': ['red', 'orange', 'green', 'black']})
costs = pd.DataFrame({'fruit': ['apple', 'orange', 'blueberry'],
'cost': [1.7, 1.4, 2.1]})
我想要一份
costs
表中按cost
排序的fruit
表的副本,但不包括cost列。最好的方法是什么?如果在中间步骤中有一个连接就可以了-我最担心的是长期内存浪费。我会进行左合并,然后进行argsort:
In [11]: fruit.merge(costs, how="left")
Out[11]:
colour fruit cost
0 red apple 1.7
1 orange orange 1.4
2 green apple 1.7
3 black blueberry 2.1
注意:如果您使用了不同的索引(水果),它将被忽略/替换为范围(0,len(水果))
现在使用iloc(按位置)而不是loc(按标签)重新排序
注意:左合并很重要,因为普通合并将更改顺序(!!)。它也更有效
另一种更清洁但效率更低的方法:
In [21]: fruit.merge(costs).sort("cost").loc[:, fruit.columns]
Out[21]:
colour fruit
2 orange orange
0 red apple
1 green apple
3 black blueberry
注意:在下一个panda中,
sort\u值
可能比sort
更可取。为什么不合并列,然后删除不需要的列
pd.merge(fruit , costs).sort_index(by = 'cost').drop('cost' , axis = 1 )
好的,
fruit.loc[fruit.merge(costs)['cost'].argsort().argsort()]
起作用,但也许有更好的方法?
In [21]: fruit.merge(costs).sort("cost").loc[:, fruit.columns]
Out[21]:
colour fruit
2 orange orange
0 red apple
1 green apple
3 black blueberry
pd.merge(fruit , costs).sort_index(by = 'cost').drop('cost' , axis = 1 )