У меня есть две функции 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