Объединение Pandas DataFrames с неправильно выровненными индексами - PullRequest
1 голос
/ 30 марта 2019

У меня есть 3 кадра данных, train и test содержат мой набор поездов и тестов соответственно. svd_col содержит функции для набора поездов и тестового набора в указанном порядке.

Размеры выстраиваются в ряд:

print(svd_col.shape)
print(train.shape)
print(test.shape)

#output:
(237774, 32) # 32 SVD components
(225609, 45)
(12165, 2) # 225609 + 12165 = 237774 as expected

Теперь я хочу объединить значения SVD со столбцами id и target моего набора поездов и со столбцом id моего набора тестов.

Работает, как и ожидалось, для состава поезда:

X_train = train[['id', 'target']]
print(X_train.shape)
print(svd_col[0:len(X_train)].shape)
X_train = pd.concat([X_train, svd_col[0:len(X_train)]], axis=1)
print('X_train', X_train.shape)

# output:
(225609, 2)
(225609, 32)
X_train (225609, 34) # perfect!

Теперь проблема! Я хочу сделать то же самое для тестового набора:

X_test = test[['id']]
print(X_test.shape)
print(svd_col[len(X_train):].shape)
X_test = pd.concat([X_test, svd_col[len(X_train):]], axis=1)
print('X_test', X_test.shape)

# output:
(12165, 1)
(12165, 32)
X_test (24330, 33) # why 24330 and not 12165?!

Полагаю, проблема в том, что индекс svd_col не начинается с 0, поэтому я попытался сбросить его:

X_test = X_test
X_test = pd.concat([X_test, svd_col[len(X_train):].reset_index()], axis=1)
print('X_test', X_test.shape)

# output:
(12165, 1)
(12165, 32)
X_test (12165, 34) # why 34 and not 33?

Но теперь у меня есть дополнительный столбец «указатель», который я не могу удалить: - /

1 Ответ

0 голосов
/ 30 марта 2019

Проблема после того, как reset_index создан новый столбец из индекса.

Вам нужен параметр drop=True, чтобы избежать его:

X_test = pd.concat([X_test, svd_col[len(X_train):].reset_index(drop=True)], axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...