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_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: Shape of passed values is (3, 4), indices imply (3, 3)
好像concat
用了unique
索引,如果索引没有排序,看下面:
如果indexes
被numbers
代替:
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
我在一个列表中有 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_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: Shape of passed values is (3, 4), indices imply (3, 3)
好像concat
用了unique
索引,如果索引没有排序,看下面:
如果indexes
被numbers
代替:
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