Я написал функцию, которая явно определяет, какие строки определенного столбца ('UNEXPLAINED_Sq') суммировать в Pandas df на основе двух других столбцов ('REPORTING_DATE', 'WindowEnd').
def sum_scores (row):
s = row['REPORTING_DATE']
e = row['WindowEnd']
s_sum = df.loc[df['REPORTING_DATE'] <= s, 'UNEXPLAINED_Sq'].sum()
e_sum = df.loc[df['REPORTING_DATE'] < e, 'UNEXPLAINED_Sq'].sum()
return (s_sum - e_sum)
df.loc[:, 'UNEXPLAINED_Sq_SUM'] = df.apply(sum_scores, axis=1)
Затем я сделал его более универсальным c, чтобы я мог передать переменную столбца для суммирования:
def sum_scores_5 (row, c_Name):
s = row['REPORTING_DATE']
e = row['WindowEnd']
s_sum = df.loc[df['REPORTING_DATE'] <= s, df[c_Name]].sum
e_sum = df.loc[df['REPORTING_DATE'] < e, df[c_Name]].sum
return (s_sum - e_sum)
df.loc[:, 'UNEXPLAINED_Sq_SUM'] =df.apply(sum_scores_5, 'UNEXPLAINED_Sq', axis=1)
Но возвращает: TypeError: apply () получил несколько значений для аргумента оси
Тогда я подумал, что буду использовать лямбда-функцию для нескольких переменных
df.loc[:, 'UNEXPLAINED_Sq_SUM'] = df.apply(lambda x: sum_scores_5(x, df['UNEXPLAINED_Sq']), axis=1)
Но это возвращает KeyError: ('[2.01018345e + 13 ... \ n 1.67234745e + 3.02534089e + 14] не в индексе ',' произошло в индексе 0 ')
, что, я думаю, связано с тем, что я пытаюсь передать весь столбец для оценки в каждой строке.
Фрагмент данные перечислены ниже. Как я могу проиндексировать переменную столбца для суммирования?
***** Таблица данных *****
REPORTING_DATE UNEXPLAINED_Sq WindowEnd
2019-02-01 2.010183e+13 2018-08-01
2019-02-04 6.136327e+13 2018-08-04
2019-02-05 1.123688e+13 2018-08-05
2019-02-06 1.253237e+12 2018-08-06
2019-02-07 5.673673e+13 2018-08-07