Передача переменных столбца в функцию Pandas - PullRequest
0 голосов
/ 26 мая 2020

Я написал функцию, которая явно определяет, какие строки определенного столбца ('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

1 Ответ

0 голосов
/ 26 мая 2020
def sum_scores_5 (row, c_Name):

    s = row['REPORTING_DATE']
    e = row['WindowEnd']        

    s_sum = df.loc[df['REPORTING_DATE'] <= s, c_Name].sum()
    e_sum = df.loc[df['REPORTING_DATE'] < e, c_Name].sum()

    return (s_sum - e_sum)  

df.loc[:, 'UNEXPLAINED_Sq_SUM'] = df.apply(lambda x: sum_scores_5(x, 'UNEXPLAINED_Sq'), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...