Объединение двух фреймов данных с разными индексами при сохранении индекса основного фрейма данных с использованием однострочного кода - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть два кадра данных;первый (df1):

df1 = pd.DataFrame({'col1': [0,1], 'col2': [0,1]})
df1 = df1.rename(index = {k:v for k,v in zip([0,1],['zero','one'])})
print(df1)
      col1  col2
zero    0   0
one     1   1

, а второй (df2):

df2 = pd.DataFrame({k:v for k,v in zip(['col'+str(i) for i in range(3,10)],
                            [[2,3]]*7)
                            })
print(df2)
   col3  col4  col5  col6  col7  col8  col9
0     2     2     2     2     2     2     2
1     3     3     3     3     3     3     3

конечный продукт (df3) должен выглядеть точно так же:

      col1  col2  col3  col4  col5  col6  col7  col8  col9
zero     0     0     2     2     2     2     2     2     2
one      1     1     3     3     3     3     3     3     3

Вот как я это делаю, что на мой вкус немного не пифонично:

df3 = df1.reset_index(drop = True)
df3 = df3.join(df2.reset_index(drop = True))
df3 = df3.rename(index = {k:v for k,v in zip(df3.index,df1.index)})
print(df3)

Есть ли какой-нибудь однострочный код, который может выполнить эту работу?Спасибо, ребята

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете создать df2.index, df1.index, set_index, только необходимые одинаковые длины обоих DataFrames:

df = df1.join(df2.set_index(df1.index))

Или:

df = pd.concat([df1, df2.set_index(df1.index)], axis=1)
print (df)
      col1  col2  col3  col4  col5  col6  col7  col8  col9
zero     0     0     2     2     2     2     2     2     2
one      1     1     3     3     3     3     3     3     3

Если список имеет одинаковую длину, как у обоих DataFrames, передайте вложенный список для того, чтобы отличить требуемый список пропусков, а не список имен столбцов (df2.set_index(L) или df2.set_index(['a','b'])):

L = ['a','b']
df = pd.concat([df1.set_index([L]), df2.set_index([L])], axis=1)
print (df)
   col1  col2  col3  col4  col5  col6  col7  col8  col9
a     0     0     2     2     2     2     2     2     2
b     1     1     3     3     3     3     3     3     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...