【发布时间】:2013-11-26 00:59:09
【问题描述】:
我在 pandas 中有两个 DataFrame,试图合并它们。但是熊猫不断改变顺序。我已经尝试设置索引,重置它们,无论我做什么,我都无法让返回的输出具有相同顺序的行。有诀窍吗? 请注意,我们从贷款顺序“a,b,c”开始,但在合并之后,它是“a,c,b”。
import pandas
loans = [ 'a', 'b', 'c' ]
states = [ 'OR', 'CA', 'OR' ]
x = pandas.DataFrame({ 'loan' : loans, 'state' : states })
y = pandas.DataFrame({ 'state' : [ 'CA', 'OR' ], 'value' : [ 1, 2]})
z = x.merge(y, how='left', on='state')
但现在顺序不再是原来的'a,b,c'。有任何想法吗?我使用的是熊猫版本 11。
【问题讨论】:
-
一方面,您需要传递
sort=False否则它将根据您不想要的连接键进行排序。但这还不足以解决问题;未排序的顺序仍会将来自同一源行的所有行组合在一起。一个简单的解决方法是执行x.merge(x.merge(y, how='left', on='state', sort=False)),它将x中的每一行与合并中的相应for 合并,从而恢复x的原始顺序。但希望现在有一个更好的解决方案正在逃离我的大脑。 -
@abarnert,我认为我们可以使用
.join()或.update()(出于某种原因)它们确实保留了订单。