【问题标题】:Pandas: concat sorted dfs with same labelsPandas:concat 对具有相同标签的 dfs 进行排序
【发布时间】:2016-07-27 00:53:33
【问题描述】:

我在一个列表中有 3 个 dfs。每个 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)

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

【问题讨论】:

  • 通过 ignore_index=True pd.concat(listofdfs, axis=1, ignore_index=True) 应该可以工作
  • 我收到此错误:ValueError:传递值的形状为 (6, 15),索引暗示 (6, 14)。但是,如果我对每个 df 进行排序,则 concat 可以正常工作。
  • 那么你想重复join吗?
  • 不是特别想加入,但我想我必须...
  • 嗯,对我来说效果很好。我认为您收到值错误,因为您在索引中有重复项。

标签: python list pandas concat


【解决方案1】:

我认为这是错误,可能类似于6963

为我工作sort_index 的所有DataFrames

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: 传递值的形状是 (3, 4),索引意味着 (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:重新索引仅对具有唯一值的索引对象有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多