2016-04-06 4 views
0

У меня есть 3 dfs в списке. Каждый df имеет одни и те же строки, однако порядок этих строк не одинаков. Они сортируются по значению.Pandas: concat отсортированные 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 

Вот как пытаются CONCAT:

pd.concat(listofdfs, axis=1) 

есть способ Concat этой глубины без сортировки их? Я думал, что concat не заботится о позиционировании лейблов, поскольку каждый df содержит одни и те же метки?

+0

проход 'ignore_index = true'' pd.concat (listofdfs, ось = 1, ignore_index = True) 'должна работать – EdChum

+0

Я получаю эту ошибку: ValueError: Форма переданных значений (6, 15), индексы подразумевают (6, 14). Однако concat отлично работает, если я сортирую каждый df. –

+0

Так вы хотите снова «присоединиться»? – EdChum

ответ

1

Я думаю, что это ошибка, может быть, что-то подобное 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 индексы, если индексы не отсортирован, см ниже:

Еслизаменены 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

Смежные вопросы