<jupyter_start><jupyter_text>Делаем заголовки столбцов<jupyter_code>cols = []

# делаем назzвания столбцов в список
for i in [8,9]:
    cols = pp.list_concat(cols, list(df.iloc[i]))

for i, el in enumerate(cols):
    cols[i] = cols[i].replace('\n','')

pp.p2c(cols)
df.columns = cols
cols = []

# делаем назzвания столбцов в список
for i in [8,9]:
    cols = pp.list_concat(cols, list(df2.iloc[i]))

for i, el in enumerate(cols):
    cols[i] = cols[i].replace('\n','')

pp.p2c(cols)
df2.columns = cols<jupyter_output><empty_output><jupyter_text>отрезаем лишние столбцы<jupyter_code># данные только с 0 по 12 столбец
df = df.iloc[:,0:12]
df2 = df2.iloc[:,0:12]
df.tail(20)<jupyter_output><empty_output><jupyter_text>отрезам лишние строки<jupyter_code># для подготовки маски фильтра будет использована специальная функция, которая создает маски по количеству переданных условий,
# а потом складывает их через логическое И &. Т.е. остаются только те строки, которые удовлетворяют всем условиям вместе.
# В данном случае у нас 2 условия, поле наименование не число, а поле Код число.
f = pp.df_filter_and(df, {'Наименование показателя': 'isnotnum', 
                          'Код по бюджетной классификации': 'isnum'})
df_ = df[f].reset_index(drop=True)

f = pp.df_filter_and(df2, {'Наименование показателя': 'isnotnum', 
                          'Код по бюджетной классификации': 'isnum'})
df2_ = df2[f].reset_index(drop=True)<jupyter_output><empty_output><jupyter_text>Делим значения столбца Коды ФКР на 2 столбца: РЗ, ПР<jupyter_code>new = df_['Коды ФКР'].str.extract(r'(\d\d)(\d\d)')
new.columns = ['РЗ','ПР']
df_ = df_.join(new)
new = df2_['Коды ФКР'].str.extract(r'(\d\d)(\d\d)')
new.columns = ['РЗ','ПР']
df2_ = df2_.join(new)<jupyter_output><empty_output><jupyter_text>Фильтруем, чтобы остались только данные по разделам<jupyter_code>f = pp.df_filter_and(df_, {'Коды ВР': 'isnotnum', 
                            'Коды ЦСР': 'isnotnum',
                            'Уточненная сводная бюджетная роспись': 'isnum',
                            'ПР': '00'})
df_1 = df_[f]
f = pp.df_filter_and(df2_, {'Коды ВР': 'isnotnum', 
                            'Коды ЦСР': 'isnotnum',
                            'Уточненная сводная бюджетная роспись': 'isnum',
                            'ПР': '00'})
df2_1 = df2_[f]
df2_1.head(3)
pp.p2c(df2_1.columns)
y2002 = df_1.iloc[:,[0,6,12]].groupby(['РЗ']).agg({'Наименование показателя': 'first',
                                           'Уточненная сводная бюджетная роспись': 'sum'})
y2003 = df2_1.iloc[:,[0,6,12]].groupby(['РЗ']).agg({'Наименование показателя': 'first',
                                           'Уточненная сводная бюджетная роспись': 'sum'})
yy = y2002.merge(y2003, on='РЗ', how='outer').reset_index()
yy.head(2)
yy.columns = ['РЗ','Наименование показателя 2002','тыс.р. 2002',
              'Наименование показателя 2003','тыс.р. 2003']
yy<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15405589638718473, 'fraction_numerical': 0.029993183367416496, 'mean_word_length': 3.3675595238095237, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '81893', 'license': 'MIT', 'n_tokens_mistral': 1284, 'n_tokens_neox': 1355, 'n_words': 231, 'path': 'budget_data.ipynb', 'repo_name': 'legale/federal_budget_data', 'size': '2934'}