Включение строк из нескольких фреймов данных в новый фрейм данных

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть около 20 фреймов данных, в которых я ориентируюсь на значения определенной строки. Например, я показываю упрощенную версию одного из моих фреймов данных

     Type   N1   N2
    43     121  455
    23     554  52
    85     74   615
 

Я хочу получить строку каждого «Типа» 23 из моих наборов данных

Я пробовал приведенный ниже код, но на выходе получается какой-то мусор.

 dataf = pd.DataFrame()
for x in [df1,df2,...df20]:
    data = x.loc[x['Type']==23]
dataf.append(data)
 

То, что я ожидаю получить, — это новый фрейм данных с теми же столбцами, что и N1 и N2, со значениями выбранных строк.

Ожидаемый новый фрейм данных:

     N1   N2
    554  52
    153  87  and so on..
 

Ответ №1:

Я думаю, что:

 df_list = [df1,df2, ...,df20]
filtered_df_list = [ df[df['Type'] == 23] for df in df_list ] #Filter each mini-df on "Type" = 23

final_df = pd.concat(filtered_df_list) # Concat the small mini-dfs (hence faster concatenating)
 

Может быть более эффективным и менее трудоемким в зависимости от размера фреймов данных, но это можно доказать. Если вы поделитесь с нами некоторыми данными, чтобы я мог это сделать, или если вы хотите сделать это сами, меня интересует ответ.

Ответ №2:

Используется pd.concat для объединения фреймов данных перед фильтрацией:

 dfc = pd.concat([df1, df2, ..., df20])
dataf = dfc[dfc.Type == 23][['N1', 'N2']]
 

В зависимости от того, как выглядит ваш конвейер, есть вероятность, что вы сможете объединить фреймы данных уже тогда, когда они будут прочитаны в первую очередь.

Комментарии:

1. Выполнение фильтрации до concat того, как это может быть более эффективным.

2. @ggrelet можете ли вы объяснить фильтрацию?

3. Я добавил свой собственный ответ из-за ограничений форматирования комментариев по сравнению с ответами. Проверьте это.