Сумма столбцов DF, хранящихся во вложенном dict - PullRequest
0 голосов
/ 29 апреля 2020

Я получил словарь с двумя другими словарями, каждый из которых хранит 3 кадра данных {0: DataFrame, 1: DataFrame, 2: DataFrame}.

dict_results = {ID_1542: {0: DataFrame, 1: DataFrame, 2: DataFrame}, ID_8468: {0: DataFrame, 1: DataFrame, 2: DataFrame}}

Каждый DataFrame имеет такой же размер. 6 переменных, 25 строк, например

    A    B   ...   F
0   500  400       885.2
...
24  799  248       103    

Я хотел бы суммировать все значения / строки из каждого столбца DataFrame 'B' для словарей ID_1542 и ID_8468.

Я хотел бы сохранить результаты в новом отдельном DataFrame с двумя столбцами ['ID_1542'] и ['ID_8468'] и 3 строками (каждая для каждой суммы DF0, DF1, DF2). Как я могу это сделать?

Я попробовал это с ...

for idx, df in dict_results.items():
    temp_list = []

    for key in df:
        temp_list.append(df[key]['B'].sum()/1000)
        SumsOfB = pd.DataFrame(temp_list, columns = [idx])

Это дает мне DataFrame с именем столбца ['ID_8468'] и последними 3 суммами. Как я могу получить DataFrame с двумя столбцами с именами ['ID_1542'] и ['ID_8468'] и соответствующими суммами (т.е. 3 строки (каждая для каждой суммы DF0, DF1, DF2))?

1 Ответ

0 голосов
/ 29 апреля 2020

Давайте создадим пример данных:

import pandas as pd

cols = ['ColFoo', 'Values']

dfA = pd.DataFrame([['a', 10], ['b', 11]], columns = cols) 
dfB = pd.DataFrame([['d', 12], ['e', 13]], columns = cols) 
dfC = pd.DataFrame([['g', 14], ['h', 15]], columns = cols) 
dfD = pd.DataFrame([['j', 16], ['k', 17]], columns = cols) 
dfE = pd.DataFrame([['m', 18], ['n', 19]], columns = cols) 
dfF = pd.DataFrame([['p', 20], ['q', 21]], columns = cols) 


# For example, the dfA is:
#   ColFoo   Values
#   ------   ------
#      a       10       
#      b       11


# Build dict_results
dict_results = {'ID_1542': {0: dfA, 1: dfB, 2: dfC}, 
                'ID_8468': {0: dfD, 1: dfE, 2: dfF}}

Окончательный результат, который, я думаю, вы ищете:

   df    ID_1542  ID_8468
-------  -------  -------
    0       21        33       
    1       25        37
    2       29        41 

Итак:

# Dictionary to summarize data 
d = {}

# Loop over "Values":
# kf: Key father
# kc: Key child
for kf in dict_results:
    d[kf]={}
    for kc in dict_results[kf]:
        d[kf][kc] = dict_results[kf][kc]['Values'].sum()

# Convert dictionary to dataframe        
df_sum = pd.DataFrame.from_dict(d)

# In case you want to have the index as a independent column
df_sum.reset_index().rename(columns={"index":"df_kc"})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...