我在列表中有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包含相同的标签?
答案 0 :(得分:1)
我认为这是错误,也许类似于6963。
对我来说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
:
sort_index
如果省略concat
,则出错:
ValueError:传递值的形状为(3,4),索引为暗示(3,3)
似乎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
但如果省略--commit-filter
:
InvalidIndexError:重新索引仅对具有唯一值的索引对象有效