Pandas公司股价信息高级透视

xcitsw88  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(65)

我有一个下表,其中x轴显示公司股票代码,y轴显示日期,表中包含股价信息。该表包含某些公司股票代码的Nan值,直到其IPO日期,然后将其股价信息显示在表中。我想透视此表,这样股票代码将显示在y轴上,计数数字最多为180这些计数数字将代表从IPO日(第1天)开始的每一天,用于每个单独的公司股票代码,因此显示该公司第1天、第2天-〉第180天等的相关股价信息。
AC ACQRW ADVWW API ... VRAX VRRM VSAC版本日期...
2015 - 01 - 02纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩2015 - 01 - 01 - 07纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳恩纳2022 - 11 - 28 40.265415亚硝酸钠亚硝酸钠2.50 1.350 15.66 10.140 5.57 2022 - 11 - 2511 - 29 38.500000钠氮2.65钠氮1.320 15.51 10.140钠氮3.14钠氮1.565 15.85 10.240钠氮2.94钠氮2.94钠氮六百一十十五点八二十零一七六六点零四
我花了几个小时使用CHATGPT,尝试了许多不同的透视,但似乎不能很容易地获得每个公司的相关天的定价信息。

x4shl7ld

x4shl7ld1#

IIUC,您可以在 Dataframe melt之后使用pivot_table

out = (df.melt(var_name='ticker', value_name='close').dropna()
         .assign(day=lambda x: x.groupby('ticker').cumcount().add(1))
         .pivot_table(index='day', columns='ticker', values='close'))
print(out)

# Output
ticker         AC        API       VRAX  VRRM  VSAC       VYGR
day                                                           
1       26.522747  50.500000  18.200001  10.0  9.87  17.750000  # 1st day after IPO
2       26.522747  47.000000  10.340000  10.0  9.89  17.500000  # 2nd day after IPO
3       26.522747  44.169998  16.799999  10.0  9.89  18.100000  # 3rd day after IPO
4       26.522747  48.790001  18.440001  10.0  9.88  17.799999  # and so on.
5       25.651733  56.490002  18.690001  10.0  9.90  19.150000
...           ...        ...        ...   ...   ...        ...
1831    36.849998        NaN        NaN   NaN   NaN   7.130000
1832    35.540001        NaN        NaN   NaN   NaN   7.080000
1833    36.000000        NaN        NaN   NaN   NaN   6.920000
1834    36.150002        NaN        NaN   NaN   NaN   7.090000
1835    36.160000        NaN        NaN   NaN   NaN        NaN

[1835 rows x 6 columns]

如果您想要前180天,只需对输出进行切片:out.loc[:180] .
最小重现性示例:

import yfinance as yf

tickers = ['AC', 'API', 'VRAX', 'VRRM', 'VSAC', 'VYGR']
df = yf.Tickers(tickers).history('10y')['Close']

相关问题