gpt4 book ai didi

python - Pandas concat 似乎忽略了索引

转载 作者:行者123 更新时间:2023-12-04 04:09:50 31 4
gpt4 key购买 nike

我对 Pandas 比较陌生。我在使用 pd.concat() 时遇到了意想不到的问题。

df1 = pd.DataFrame([], columns=['a', 'b', 'c']).set_index(['b', 'a'])
df2 = pd.DataFrame([[1, 2, 3]], columns=['a', 'b', 'c']).set_index(['a', 'b']) # intentionally reverse
pd.concat([df1, df2])

我希望上面的结果是:

     c
a b
1 2 3

但它是:

     c
b a <---- note that b=1 and a=2 here
1 2 3

换句话说,似乎 pd.concat() 在执行 pd.concat() 时忽略了索引 header ,但随后在pd.concat() 完成。

另一方面,pd.concat() 的工作方式与我对列标题的预期一致。 pd.concat([df1.reset_index(), df2.reset_index()]) 的结果是:

     a    b  c
0 1.0 2.0 3

正如预期的那样。

我用 pd.concat() 和索引观察到的行为是预期的行为吗?

我试过谷歌搜索,但没能找到有人遇到类似问题的例子。

谢谢!

最佳答案

似乎 Pandasconcat 期间:

  • 仅从第一个 DataFrame 获取索引列名。
  • 但对于进一步的 DataFrame,只有 numbers 列很重要,只要索引列匹配。

所以在 df1 的情况下,MultiIndex 由列 10 组成(数字从 0 开始,但在 df2df3 - 由 01 列组成>,不管他们的名字如何

为了确认这一点,请尝试更广泛的示例:

df1 = pd.DataFrame([], columns=['a', 'b', 'c']).set_index(['b', 'a'])
df2 = pd.DataFrame([[1, 2, 3]], columns=['aa', 'bb', 'c']).set_index(['aa', 'bb'])
df3 = pd.DataFrame([[10, 20, 30]], columns=['xx', 'yy', 'c']).set_index(['xx', 'yy'])
pd.concat([df1, df2, df3])

结果是:

        c
b a
1 2 3
10 20 30

所以如你所见,即使源列名(仅针对索引列)是不同的,这没有任何意义。只有它们在列中的位置是重要。

但是,如果您更改(常规 列的)第三列名称:

df3 = pd.DataFrame([[10, 20, 30]], columns=['xx', 'yy', 'cc']).set_index(['xx', 'yy'])

(c改为*cc),结果不一样:

         c    cc
b a
1 2 3.0 NaN
10 20 NaN 30.0

关于python - Pandas concat 似乎忽略了索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61920937/

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