#python #pandas #indexing
Вопрос:
Предположим, я должен был
common_indices = df1.index.intersection(df2.index)
что дает <class 'pandas.core.indexes.base.Index'>
объект, как я могу восстановить значения, связанные с другим фреймом данных (например df3
).
Как попытка
sub_df3 = df3.where(df3.index == common_indices)
дает ValueError: Lengths must match to compare
Комментарии:
1. С чем ты пытаешься это сделать
df3
? Когда вы делаетеdf3.index == common_indices
то, что он пытается сделать, это создать массив истинно-ложных значений из равных по элементам.
Ответ №1:
Воспользуйся loc
:
df3.loc[common_indices]
Пример:
import numpy as np
import pandas as pd
df1 = pd.DataFrame(index = range(9), data=np.random.randint(low=100,size=(9,3)))
df2 = pd.DataFrame(index = [1,2,3,4,5], data=np.random.randint(low=100,size=(5,3)))
df3 = pd.DataFrame(index = range(9), data=np.random.randint(low=100,size=(9,3)))
>>> df1.index.intersection(df2.index)
Int64Index([1, 3, 5], dtype='int64')
>>> df3.loc[df1.index.intersection(df2.index)]
0 1 2
1 90 33 99
3 90 41 43
5 3 10 12
Ответ №2:
df3.loc[common_indices]
Не следует путать с:
df3.loc(common_indices)
Что дает TypeError