Python 绕过“混凝土错误”;重新索引仅对唯一值索引对象有效;

Python 绕过“混凝土错误”;重新索引仅对唯一值索引对象有效;,python,pandas,dataframe,concatenation,Python,Pandas,Dataframe,Concatenation,我有3个数据帧,包括来自同一组的信息,现在我正试图通过组concate这些数据帧,通过set_index作为组名,但是由于df1包含的索引不是唯一的,因此我无法concate它们。有没有办法绕过这个问题 输入df的示例: df1: group A B cat 1 0 cat 2 7 cat 5 5 dog 0.4 1 dog 2 4 dog 8

我有3个数据帧,包括来自同一组的信息,现在我正试图通过组
concate
这些数据帧,通过
set_index
作为组名,但是由于
df1
包含的索引不是唯一的,因此我无法
concate
它们。有没有办法绕过这个问题

输入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
通缉输出:

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
谢谢

我认为如果尺寸相同,可以先使用
df2
df3
,然后:

也可以在中使用参数
index\u col


谢谢对于少量数据帧,这是一种很好的方法。但是如果大量数据帧可能需要多次
concate
join
,您认为有没有办法同时
concate
并绕过此
唯一值
错误?谢谢我认为
concat
可以完美地处理多个数据帧,如果需要多个连接,可以使用类似的
merge(how='left')
by answer.thx,这篇文章很有帮助!实际上我更喜欢
merge
,因为
join
似乎需要在相同的索引位置使用公共值。到目前为止,我没有看到
merge
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
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')