#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. Я добавил свой собственный ответ из-за ограничений форматирования комментариев по сравнению с ответами. Проверьте это.