在时间t1和时间t匹配面板数据

2024-10-03 23:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在从事一个涉及财务数据的项目。我有一个数据框架,包含许多基本变量以及许多不同公司的股票回报,如下所示:

           year     ticker      tot_assets      return
0          1999       AAPL          10.345      0.1294
1          2000       AAPL          10.988      0.1577
2          2001       AAPL          12.003      0.0782
..          ...        ...             ...         ...
34521      2017       GMBO           0.893      0.2209
34522      2018       GMBO           1.206      0.1001
..          ...        ...             ...         ...
200344     2012         ZZ           3.789      0.0032
200344     2013         ZZ           3.021     -0.0346

我一直试图做的但没有成功的是,根据t-1年最接近的tot_assets值,将df中的每个公司ticker与另一个公司匹配。因此,创建两个新列,其中一个列具有匹配公司的ticker及其在时间t的returns。所以我们在时间t-1进行匹配,但是报告的返回是时间t的

所以它应该是这样的:

           year     ticker   tot_assets   return   m_ticker   m_return 
0          1999       AAPL       10.345   0.1294         AA     0.0890     
1          2000       AAPL       10.988   0.1577         AA     0.1666     
2          2001       AAPL       12.003   0.0782       TSLA     0.3470
..          ...        ...          ...      ...        ...        ...
34521      2017       GMBO        0.893   0.2209        AIR     0.0032
34522      2018       GMBO        1.206   0.1001       CECE     0.1123
..          ...        ...          ...      ...        ...        ...
200344     2012         ZZ        3.789   0.0032       ASKI     0.0432
200344     2013         ZZ        3.021  -0.0346       ASKI     0.0339

我希望我的解释足够清楚:p也许这就是我遇到麻烦的原因!我无法向您展示df,因为它有超过200000个观测值-但我希望上面的概念能有所帮助:)

提前谢谢你


Tags: 项目dfreturn时间公司yearaaticker
1条回答
网友
1楼 · 发布于 2024-10-03 23:28:46

这将为您提供公司的股票行情,该公司的tot_资产与第一年最接近。希望您只需要运行一次就可以创建数据集。否则,您将不得不研究更快的替代方案

import numpy as np

def closest_match(row, df):
    '''Uses absolute values and argmin to find closest match'''
    try:
        last_year = df.loc[df.year == row.year - 1, :]
        absvals = np.abs(last_year['tot_assets'] - row.tot_assets)
        return last_year.iloc[absvals.argmin(), last_year.columns.get_loc('ticker')]
    except Exception as e:
        return None

df['ticker_closest_tot_assets'] = df.apply(closest_match, args=(df,), axis=1)
# then look up return based on year, ticker_closest_tot_assets

相关问题 更多 >