gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:34:31 28 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 排序,而是要保留 whatever 原始顺序在 x,这可能与 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/20206615/

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