Группировать по столбцам на основе имен и добавлять к новому фрейму данных R - PullRequest
0 голосов
/ 31 мая 2019

У меня есть две функции Python, которые я пытаюсь преобразовать в R. Функция Python принимает фрейм данных, список столбцов, столбец данных и функцию агрегирования.Затем он выводит новый фрейм данных, имеющий столбец даты (группа по столбцу), «Имя компонента», которое является именем столбца, FeatureValueDSC, который является функцией агрегирования, и «MetricNBR» - выведенное агрегирование.Ниже приведен код Python:

    def continuous_preprocess(df,continuous_cols,date_col,stat):
        output_df = pd.DataFrame()
        for col in continuous_cols:
            for s in stat:
                if s == 'mean':
                    temp_df = df[[date_col]+[col]].groupby([date_col]).agg('mean').reset_index()
                elif s == 'std':
                    if len(df[col].unique()) == 2:
                        temp_df = df[[date_col]+[col]].groupby([date_col]).agg('std').reset_index()
                    else:
                        print(f"{col} is binary")
                        continue
                else:
                    print("try 'mean' or 'std'")
                    continue
                temp_df['FeatureNM'] = col
                temp_df['FeatureValueDSC'] = s
                temp_df.rename(columns={col:'MetricNBR'},inplace=True)
                output_df = output_df.append(temp_df)
        return output_df[[date_col,'FeatureNM','FeatureValueDSC','MetricNBR']]

, как показано выше, к новому фрейму данных добавляется после группировки по дате и применения функции в столбце фрейма данных.

пока у меня есть:

output_df = NULL

for (col in names(dev_df))
  if (col %in% continuous_features)
    output_df = rbind(output_df,dev_df%>% group_by(dts) %>% 
                                     summarize(MetricNBR = mean(col)))

, но я не могу выполнять функции по именам столбцов.Любая помощь будет оценена.

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

        def categorical_data(df,categorical_cols,date_col):
            output_df = pd.DataFrame()
            for col in categorical_cols:
                dummified_df = pd.concat([dev_df[date_col],pd.get_dummies(dev_df[categorical_cols],prefix=None)],axis=1)
                grouped_df = dummified_df.groupby([date_col]).agg('mean').reset_index()
                temp_output = pd.melt(grouped_df,id_vars = date_col,value_vars=grouped_df.columns.drop(date_col).tolist())
                temp_output['FeatureNM'] = col
                temp_output.rename(columns={'variable':'FeatureValueDSC'\
                                            ,'value':'MetricNBR'},inplace=True)
                temp_output['FeatureValueDSC'] = temp_output['FeatureValueDSC'].str.replace(f'{col}_','')
                output_df = output_df.append(temp_output)
            return output_df[[date_col,'FeatureNM','FeatureValueDSC','MetricNBR']]

Я предполагаю, что это похоже, но не уверен в части "ошеломления".

Вход выглядит примерно так:

                       FinancialClass        dts      Age
        0   Elective    Mcare   2   0   2018-11-16  87
        1   Elective    McareH  5   1   2018-07-22  112
        2   Elective    BCBS    2   1   2018-08-25  73
        3   Elective    Mcare   0   0   2018-08-29  46
        4   Elective    Mcare   5   0   2018-06-06  26
        5   Elective    Mcare   0   1   2018-01-25  13
        6   Elective    Aetna   0   0   2018-06-01  95
        7   Elective    Mcare   0   1   2018-08-01  23
        8   Elective    Mcare   5   1   2018-12-02  0
        9   Elective    Mcare   5   0   2018-04-29  19
        10  Elective    UHC     2   1   2018-01-13  113
        11  Elective    Aetna   0   1   2018-10-28  78
        12  Elective    Mcare   5   1   2018-05-28  62
        13  Elective    BCBS    0   1   2018-10-31  113
        14  Elective    Mcare   1   0   2018-01-28  103
        15  Elective    BCBS    0   1   2018-05-20  13
        16  Elective    Mcare   0   0   2018-07-01  76
        17  Elective    Mcare   5   0   2018-11-18  19
        18  Elective    Mcare   0   1   2018-05-18  28
        19  Elective    BCBS    0   1   2018-09-22  51
        20  Elective    BCBS    1   0   2018-09-15  105
        21  Elective    UHC 0   1   2018-04-01  13
        22  Elective    Cign    0   0   2018-03-26  38
        23  Elective    Health  0   0   2018-12-08  122
        24  Elective    BCBS    0   1   2018-03-06  96
        25  Elective    BCBS    0   1   2018-09-24  90
        26  Elective    Aetna   0   1   2018-12-15  15
        27  Elective    Aetna   0   1   2018-08-04  32
        28  Elective    Mcare   0   1   2018-03-18  116
        29  Elective    Mcare   1   1   2018-10-03  111

Выход:

            dts FeatureNM   FeatureValueDSC MetricNBR   
        0   2018-01-01  age mean    62.158088   0
        1   2018-01-02  age mean    64.003876   0
        2   2018-01-03  age mean    62.013986   0
        3   2018-01-04  age mean    62.476703   0
        4   2018-01-05  age mean    62.054152   0
        5   2018-01-06  age mean    60.296029   0
        6   2018-01-07  age mean    66.105263   0
        7   2018-01-08  age mean    61.301075   0
        8   2018-01-09  age mean    58.850163   0
        9   2018-01-10  age mean    57.854406   0
        10  2018-01-11  age mean    58.768421   0
        11  2018-01-12  age mean    61.597561   0
        12  2018-01-13  age mean    60.692308   0
        13  2018-01-14  age mean    63.691756   0
        14  2018-01-15  age mean    63.137184   0
        15  2018-01-16  age mean    62.186312   0
        16  2018-01-17  age mean    64.501730   0
        17  2018-01-18  age mean    61.751880   0
        18  2018-01-19  age mean    61.021277   0
        19  2018-01-20  age mean    61.496212   0
        20  2018-01-21  age mean    57.346008   0
        21  2018-01-22  age mean    63.542662   0
        22  2018-01-23  age mean    63.906897   0
        23  2018-01-24  age mean    61.722022   0
        24  2018-01-25  age mean    63.959559   0
        25  2018-01-26  age mean    58.894531   0
        26  2018-01-27  age mean    57.069231   0
        27  2018-01-28  age mean    64.164835   0
        28  2018-01-29  age mean    63.400000   0
        29  2018-01-30  age mean    58.888889   0
        ... ... ... ... ... ...
        1430    2018-12-02  FinancialClassDSC   mean    0.066667    0
        1431    2018-12-03  FinancialClassDSC   mean    0.066667    0
        1432    2018-12-04  FinancialClassDSC   mean    0.062500    0
        1433    2018-12-05  FinancialClassDSC   mean    0.071429    0
        1434    2018-12-06  FinancialClassDSC   mean    0.058824    0
        1435    2018-12-07  FinancialClassDSC   mean    0.062500    0
        1436    2018-12-08  FinancialClassDSC   mean    0.058824    0
        1437    2018-12-09  FinancialClassDSC   mean    0.066667    0
        1438    2018-12-10  FinancialClassDSC   mean    0.062500    0
        1439    2018-12-11  FinancialClassDSC   mean    0.055556    0
        1440    2018-12-12  FinancialClassDSC   mean    0.066667    0
        1441    2018-12-13  FinancialClassDSC   mean    0.062500    0
        1442    2018-12-14  FinancialClassDSC   mean    0.071429    0
        1443    2018-12-15  FinancialClassDSC   mean    0.062500    0
        1444    2018-12-16  FinancialClassDSC   mean    0.066667    0
        1445    2018-12-17  FinancialClassDSC   mean    0.058824    0
        1446    2018-12-18  FinancialClassDSC   mean    0.066667    0
        1447    2018-12-19  FinancialClassDSC   mean    0.062500    0
        1448    2018-12-20  FinancialClassDSC   mean    0.071429    0
        1449    2018-12-21  FinancialClassDSC   mean    0.071429    0
        1450    2018-12-22  FinancialClassDSC   mean    0.062500    0
        1451    2018-12-23  FinancialClassDSC   mean    0.058824    0
        1452    2018-12-24  FinancialClassDSC   mean    0.055556    0
        1453    2018-12-25  FinancialClassDSC   mean    0.062500    0
        1454    2018-12-26  FinancialClassDSC   mean    0.058824    0
        1455    2018-12-27  FinancialClassDSC   mean    0.066667    0
        1456    2018-12-28  FinancialClassDSC   mean    0.062500    0
        1457    2018-12-29  FinancialClassDSC   mean    0.058824    0
        1458    2018-12-30  FinancialClassDSC   mean    0.066667    0
        1459    2018-12-31  FinancialClassDSC   mean    0.066667    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...