подмножество фреймов данных в несколько с помощью словаря

#python #pandas #dataframe #dictionary #subset

Вопрос:

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

вот это df:

 df = pd.DataFrame(np.random.randint(0,5,size=(5, 10)), columns=('a_group1_sub','a_group1_actual','b_group1_sub','b_group1_actual','b_group2_total','b_group2_sub','b_group2_expected','class_first','class_second','area_x'))
 

и вот словарь, в котором я хочу разделить фрейм данных на основе следующих группировок: df1 = a_group1, df2 b_group2 и b_group2, df3 = класс и область

 groups = dict({1: ['a_group1'], 2: ['b_group1', 'b_group2'], 3: ['class', 'area']})
 

вот цикл, который я пробовал

 for k, v in groupings.items():
    print(df.loc[:,df.columns.str.startswith([v])])
 

это работает, если я делаю что-то подобное, но не в цикле

 df.loc[:,df.columns.str.startswith('a_group1')])
 

любые комментарии приветствуются, большое вам спасибо

Ответ №1:

Это то, что вы пытаетесь сделать?

 df_list = list() # The output list of dataframes
for k, v in groups.items(): # for v in groups.values() if you don't use k
    # Get the columns that start with any of the elements in v
    cols = [c for c in df.columns if c.startswith(tuple(v))]
    # Subset df, df[cols], and append to the list of dataframes
    df_list.append(df[cols])

# df_list[i] contains the dataframe i
 

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

1. Спасибо! Это почти то, что я хочу … но это не сохранение выходных данных в новых кадрах данных. В идеале я хотел бы сохранить новые кадры данных в словаре из трех, чтобы они были доступны, например, через df[0], df[1], df[2], которые я только что добавил в x = df[cols] / out.append([x])

2. Как и где вы храните каждый результирующий кадр данных, зависит от вас. Я отредактировал ответ и добавил один вариант. Теоретически вы также могли бы использовать диктант.