Как я могу умножить определенные столбцы в одном кадре данных путем поиска определенных столбцов в другом кадре данных? - PullRequest
0 голосов
/ 28 мая 2019

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

Я довольно новичок в Python, и я уверен, что многиеЯ думаю, это просто, но, просматривая документацию, я нахожу это трудным.

Первые 2 кадра данных создаются путем чтения файла excel в pandas.

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

import pandas as pd

# read tables from excel to create dictionary of dataframes where the key is the tab name
all_sheets_df = pd.read_excel("xl_file_name.xlsx", sheet_name=None)
print(all_sheets_df)

# These are the dataframes created from the excel sheets
OrderedDict([('sheet1',
                    cola     colb     colc    uni-id  201801  201802  201803  201804  201805
              0  strings  strings  strings  unique-a       4       3       2       9      10
              1  strings  strings  strings  unique-b       8       1       9       1       6
              2  strings  strings  strings  unique-c       4       3       4       4       3
              3  strings  strings  strings  unique-d       3       9       8       4       4
              4  strings  strings  strings  unique-e       5       4       7       9      10
              5  strings  strings  strings  unique-f       2       3       8       2       1
              6  strings  strings  strings  unique-g       2       4       2       6       8
              7  strings  strings  strings  unique-h       6       2       5       4      10
              8  strings  strings  strings  unique-i       7       1       3      10       8),
             ('sheet2',
                    cola     colb     colc    uni-id    201801    201802    201803  \
              0  strings  strings  strings  unique-d  0.052935  0.928645  0.505045   
              1  strings  strings  strings  unique-f  0.776922  0.338918  0.932535   
              2  strings  strings  strings  unique-c  0.799160  0.343798  0.145575   
              3  strings  strings  strings  unique-a  0.659975  0.308475  0.588496   
              4  strings  strings  strings  unique-i  0.450931  0.667722  0.831734   
              5  strings  strings  strings  unique-e  0.791060  0.801188  0.781400   
              6  strings  strings  strings  unique-b  0.653861  0.649786  0.545784   
              7  strings  strings  strings  unique-h  0.849901  0.327025  0.874650   
              8  strings  strings  strings  unique-g  0.812554  0.995710  0.042272   

                   201804    201805  
              0  0.011463  0.980985  
              1  0.743247  0.715230  
              2  0.313438  0.882728  
              3  0.656984  0.864108  
              4  0.236997  0.422303  
              5  0.603261  0.083762  
              6  0.722503  0.170563  
              7  0.608704  0.263881  
              8  0.702862  0.760257  )])


# create new dataframe as a copy of the first sheet in excel
calculated_dataframe = all_sheets_df.get("sheet1","").copy()

# get list of columns to update (all columns to be updated start with characters '20'
update_cols = [col for col in calculated_dataframe.columns if '20' in col]

# for each row in calculated_dataframe, find row in all_sheets_df.get("sheet2","") where column name 'uni-id' matches 'uni-id' in calculated_dataframe and then for each update_col in update_cols calculate_dataframe value = calculate_dataframe value * all_sheets_df.get("sheet2","") value
# this is the piece im really struggling with.

Я хочу перебрать каждую строку selected_dataframe, найтисоответствующая строка в all_sheets_df.get("sheet2",""), где столбец sheet2 uni-id = selected_dataframe столбец uni-id столбца и умножает каждый столбец, найденный в списке update_cols, вместе (эти столбцы существуют в обоих кадрах данных).

Любое руководство, которое вы можете предоставитьбыло бы здорово !!

1 Ответ

0 голосов
/ 28 мая 2019

Сначала вы должны использовать функцию merge в столбце идентификатора, чтобы иметь только один df со всеми столбцами.

df1 = df1.merge(df2, how ='left', on=['identifier_column'])

Тогда ваши строки с одинаковым идентификатором уже будут сгруппированы, и вам нужно только умножить столбцы, как вы это обычно делаете:

df1['column_3'] = df1['column_1'] * df1['column_2']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...