gpt4 book ai didi

python - pandas 合并如何保持顺序?

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:29 25 4
gpt4 key购买 nike

我在 pandas 中有两个 DataFrame,试图合并它们。但 pandas 不断改变顺序。我尝试过设置索引,重置它们,无论我做什么,我都无法获得返回的输出以使行具有相同的顺序。有什么窍门吗? 请注意,我们从贷款顺序“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'了。有任何想法吗?我使用的是 pandas 版本 11。

最佳答案

希望有人能提供更好的答案,但万一没有人这样做,这肯定会起作用,所以……

Zeroth,我假设您不想只是在 loan 上排序,而是要保留 x 中的任何原始顺序 code>,这可能与 loan 列的顺序有任何关系,也可能没有关系。 (否则,问题会更容易,也更不有趣。)

首先,您要求它根据连接键进行排序。如the docs解释一下,当您不传递 sort 参数时,这是默认值。

<小时/>

其次,如果您根据连接键进行排序,这些行最终将分组在一起,这样从同一源行合并的两行最终会彼此相邻,这意味着您仍然会得到 acb

您可以通过将行按照它们在原始 x 中出现的顺序分组在一起来解决此问题,方法是再次与 x 合并(在任一侧,它都不会并不重要),或者如果您愿意的话,可以根据 x 重新索引。像这样:

x.merge(x.merge(y, how='left', on='state', sort=False))
<小时/>

或者,您可以使用 reset_index 填充 x-index,然后对其进行排序,如下所示:

x.reset_index().merge(y, how='left', on='state', sort=False).sort('index')
<小时/>

无论哪种方式显然都显得有点浪费,而且笨拙......所以,正如我所说,希望有一个我目前没有看到的更好的答案。但如果没有,那也行。

关于python - pandas 合并如何保持顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57660673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com