У меня довольно большой фрейм данных, df2 (~ 50 000 строк x 2000 столбцов).Заголовки столбцов являются примерами имен.Отдельно у меня есть фрейм данных df1 со списком выборок, которые я хочу включить в свой анализ в качестве индекса df1.Я хочу использовать список образцов из индекса df1, чтобы выбрать только столбцы из df2 для этих выбранных образцов, отбрасывая остальные.Я также хочу сохранить порядок сэмплов из индекса df1.
Пример данных:
# df1
data1 = {'Sample': ['Sample_A','Sample_D', 'Sample_E'],
'Location': ['Bangladesh', 'Myanmar', 'Thailand'],
'Year':[2012, 2014, 2015]}
df1 = pd.DataFrame(data1)
df1.set_index('Sample')
# df2
data2 = {'Num': ['Value_1','Value_2','Value_3','Value_4','Value_5'],
'Sample_A': [0,1,0,0,1],
'Sample_B':[0,0,1,0,0],
'Sample_C':[1,0,0,0,1],
'Sample_D':[0,0,1,1,0]}
df2 = pd.DataFrame(data2)
df2.set_index('Num')
Сначала я сгенерирую список сэмплов, которые мне нужны, по индексу df1, например
samples = df1['Sample'].tolist()
то есть «samples», то
['Sample_A', 'Sample_D', 'Sample_E']
И, используя «samples», мой желаемый выходной кадр данных, df3, должен выглядеть следующим образом:
index Sample_A Sample_D
Value_1 0 0
Value_2 1 0
Value_3 0 1
Value_4 0 1
Value_5 1 0
Но если яиспользуйте
df3 = df2[samples]
Затем я получаю сообщение об ошибке:
"['Sample_E'] not in index"
Так как мне игнорировать сэмплы, которые не найдены в df2, чтобы избежать этого сообщения об ошибке?
ОБНОВЛЕНИЕ Решение, которое работало -
# 1. Define samples to use from df1
samples = df1['Sample'].tolist()
# Only include samples that are found in df2 as well
final_samples = list(set(list(df2.columns)) & set(samples ))
# Make new df with columns corresponding to final_samples
df3 = df2.loc[:, final_samples]