Панель данных Исследования и разработки Капитализация - PullRequest
1 голос
/ 02 апреля 2020

Я работаю с панелью данных, в которой указаны расходы многих компаний на исследования и разработки на протяжении многих лет.

То, что я хотел бы сделать, это капитализировать эти расходы, как если бы они были активами. Для тех, кто не знаком с финансовой терминологией, я пытаюсь накапливать значения затрат на НИОКР каждого года, используя следующие значения, уменьшая их стоимость (или «амортизируя») каждый период времени на соответствующую норму амортизации.

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

           fyear      tic      rd_tot     rd_dep 
0          1979      AMFD       1.345      0.200
1          1980      AMFD       0.789      0.200
..          ..        ..          ..         ..
211339     2017       ACA       3.567      0.340
211340     2018       ACA       2.990      0.340
211341     2018      CTRM       0.054      0.234

Где fyear - финансовый год, ti c - указанный компанией буквенный код c, rd_tot - общие расходы на исследования и разработки за год, а rd_dep применимая норма амортизации.

Пока я смог придумать следующее:

df['r&d_capital'] = [(df['rd_tot'].iloc[:i] * (1 - df['rd_dep'].iloc[:i]*np.arange(i)[::-1])).sum()for i in range(1, len(df)+1)]

Однако проблема в том, что код просто проходит через весь столбец, не принимая во внимание, что затраты на НИОКР должны быть капитализируется в компании (или ti c) указанным c способом. Я также попытался с помощью .groupby (['TIC]), но это не сработало.

Поэтому я пытаюсь найти помощь для решения этой проблемы, чтобы каждый год получать капитализацию затрат на НИОКР по СПЕЦИФИКАЦИИ КОМПАНИИ C.

Большое спасибо за ваша помощь!

1 Ответ

1 голос
/ 02 апреля 2020

Это решение разбивает исходный кадр данных на отдельные (по одному для каждой группы 'ti c') и применяет формулу расчета капитала НИОКР для каждого df. Наконец, мы воссоздаем фрейм данных, используя pd.concat.

tic_dfs = [tic_group for _, tic_group in df.groupby('tic')]

for df in tic_dfs:
    df['r&d_capital'] = [(df['rd_tot'].iloc[:i] * (1 - df['rd_dep'].iloc[:i]*np.arange(i)[::-1])).sum() for i in range(1,len(df)+1)]


result=pd.concat([df for df in tic_dfs]).sort_index()

Примечание: "_" - маска для имени группы, например, "ACA", "AMFD" et c, а tic_group является фактическим телом данных.

...