2017-07-25 123 views
1

我有3个数据帧包括来自同一组的信息,现在我试图concate这些数据框由他们的组,​​作为组名,但因为df1包含的索引不是唯一的,因此我无法使用concate这些索引。有什么办法可以绕过吗?绕过熊猫链接错误“Reindexing只适用于唯一有价值的索引对象”

样品输入DF的:

df1: 
group  A  B 
cat  1  0 
cat  2  7 
cat  5  5 
dog  0.4  1 
dog  2  4 
dog  8  7 
seal  7  5 
seal  1  8 
seal  7  9 

df2: 
group  C  D 
cat  1  3 
seal  0  5  
dog  3  4 

df3: 
group  E  F 
cat  1  5 
dog  0  3 
seal  5  9 

想。OUPUTS:

group  A  B  C  D  E  F 
cat  1  0  1  3  1  5 
cat  2  7  1  3  1  5 
cat  5  5  1  3  1  5 
dog  0.4  1  3  4  0  3 
dog  2  4  3  4  0  3 
dog  8  7  3  4  0  3 
seal  7  5  0  5  5  9 
seal  1  8  0  5  5  9 
seal  7  9  0  5  5  9 

我的代码:

df1 = pd.read(file).set_index('group') 
df2 = pd.read(file).set_index('group') 
df3 = pd.read(file).set_index('group') 

all_data = pd.concate(df1, df2, df3, axis = 1).reset_index() 

错误:

pandas.core.indexes.base.InvalidIndexError: Reindexing only valid with uniquely valued Index objects 

谢谢!

回答

1

我认为你可以使用的df2concatdf3第一,如果相同的尺寸,然后join

df = pd.concat([df2.set_index('group'), df3.set_index('group')], axis = 1) 
all_data = df1.join(df, on='group') 
print (all_data) 
    group A B C D E F 
0 cat 1.0 0 1 3 1 5 
1 cat 2.0 7 1 3 1 5 
2 cat 5.0 5 1 3 1 5 
3 dog 0.4 1 3 4 0 3 
4 dog 2.0 4 3 4 0 3 
5 dog 8.0 7 3 4 0 3 
6 seal 7.0 5 0 5 5 9 
7 seal 1.0 8 0 5 5 9 
8 seal 7.0 9 0 5 5 9 

也可以使用参数index_colread_csv代替set_index

df1 = pd.read(file) 
df2 = pd.read(file, index_col='group') 
df3 = pd.read(file, index_col='group') 

df = pd.concat([df2, df3], axis = 1) 
all_data = df1.join(df, on='group') 
+0

的感谢!对于少量数据帧来说,这是一个很好的方法。但是,如果大量的数据帧并且可能需要'concate'和'join'多次,你认为有什么方法可以同时“拼接”在一起,并绕过这个“唯一值”错误吗?谢谢!! – Kay

+0

我认为'concat'可以完美地处理多个数据框,并且如果需要多个连接,可以使用[merge](how ='left')'[this]类似的方法(https://stackoverflow.com/a/30512931/2901002 )回答。 – jezrael

+1

thx,这个帖子很有帮助!我实际上更喜欢'merge',因为'join'似乎在同一个索引位置上具有共同值的要求。到目前为止,我没有看到'merge'和'join'之间的区别......谢谢! – Kay

相关问题