2017-07-25 41 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

相關問題