#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. Как и где вы храните каждый результирующий кадр данных, зависит от вас. Я отредактировал ответ и добавил один вариант. Теоретически вы также могли бы использовать диктант.