Pandas: concat sorted dfs with same labels

Pandas: concat sorted dfs with same labels

我在一个列表中有 3 个 df。每个 df 都有相同的行,但是这些行的顺序不一样。它们按值排序。

我想将这些 dfs 连接在一起,但它失败了,因为行标签的顺序不匹配。

我的 dfs:

        Total         Total          Total
   sony   5       hond  9        phon  6
   hond   6       sony  3        phon  3
   phon   8       phon  4        hond  2
   phon   3       phon  5        sony  8

以下是尝试连接的方法:

pd.concat(listofdfs, axis=1)

有没有办法在不对它们进行排序的情况下连接这些 df?我以为 concat 不关心标签的位置,因为每个 df 都包含相同的标签?

我认为这是错误,可能是类似的东西 6963

我的作品 sort_indexDataFrames:

df1 = pd.DataFrame({'Total': {'sony': 5, 'phon': 3, 'hond': 6}})
df2 = pd.DataFrame({'Total': {'hond': 9, 'phon': 5, 'sony': 3}})
df3 = pd.DataFrame({'Total': {'hond': 2, 'sony': 8, 'phon': 3}})

df1 = df1.sort_index()
df2 = df2.sort_index()
df3 = df3.sort_index()

listofdfs = [df1,df2,df3]

print pd.concat(listofdfs, axis=1)
      Total  Total  Total
hond      6      9      2
phon      8      4      6
phon      3      5      3
sony      5      3      8

如果省略 sort_index 则出错:

ValueError: Shape of passed values is (3, 4), indices imply (3, 3)

好像concat用了unique索引,如果索引没有排序,看下面:

如果indexesnumbers代替:

df1 = pd.DataFrame({'Total': {1: 5, 2: 6, 3: 3}})
df2 = pd.DataFrame({'Total': {1: 3, 2: 9, 3: 5}})
df3 = pd.DataFrame({'Total': {1: 8, 2: 2, 3: 3}})

print df1
print df2
print df3
   Total
1      5
2      6
3      8
3      3
   Total
2      9
1      3
3      4
3      5
   Total
3      6
3      3
2      2
1      8

df1 = df1.sort_index()
df2 = df2.sort_index()
df3 = df3.sort_index()

listofdfs = [df1,df2,df3]

print pd.concat(listofdfs, axis=1)
   Total  Total  Total
1      5      3      8
2      6      9      2
3      8      4      6
3      3      5      3

但是如果省略sort_index

InvalidIndexError: Reindexing only valid with uniquely valued Index objects