从现有数据帧列名创建新的数据帧列

2024-04-30 01:54:41 发布

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

我有一个dataframe(stockData),它有三种不同类型的数据的库存数据(按日期索引),它们是LAST、VOLUME、MKTCAP。在

这是数据帧的头(stockData)

                           BBG.XLON.BTA.S_LAST  BBG.XLON.BTA.S_VOLUME  BBG.XLON.BTA.S_MKTCAP  \
date                                                                            
2001-01-02                  572               26605510               37494.60   
2001-01-03                  560               24715470               36708.00   
2001-01-04                  613               52781855               40182.15   
2001-01-05                  630               56600152               41296.50   
2001-01-08                  633               41014402               41493.15   

            BBG.XLON.VOD.S_LAST  BBG.XLON.VOD.S_VOLUME  BBG.XLON.VOD.S_MKTCAP  
date                                                                           
2001-01-02                  NaN                    NaN                    NaN  
2001-01-03               225.00              444328736            145216.0020  
2001-01-04               239.00              488568000            154251.6643  
2001-01-05               242.25              237936704            156349.2288  
2001-01-08               227.75              658059776            146990.8642 

有没有办法将这些字段中的一个字段用于所有股票创建一组新的列,并使用新的post fix(\u HOLIDAY),因此我最终得到:

^{pr2}$

如有任何帮助,将不胜感激。在


Tags: 数据类型dataframedate库存nanlastvolume
2条回答

可以使用^{}获取列名,然后去掉最后一个点(.)后面的子字符串:

names=[s[:s.rfind('.')] for s in df.columns.values]

这里我假设您的数据帧名为df。 这将导致重复的名称(对于.S_LAST.S_VOLUME和{})。现在可以使用^{}删除重复项:

^{pr2}$

现在您可以添加新列<name>.S_HOLIDAY,指定一个NaN值:

for n in uNames:
   df[n+'.S_HOLIDAY']=np.NaN

这就是你想要的吗?在

In [56]: newcols = df.columns.str.replace(r'\.S_.*','.S_HOLIDAY').unique().tolist()

In [57]: newcols
Out[57]: ['BBG.XLON.BTA.S_HOLIDAY', 'BBG.XLON.VOD.S_HOLIDAY']

然后可以轻松添加新列:

^{pr2}$

如果列的顺序对您很重要,您可以按如下方式重新排序:

df = df[ordered_column_list]

相关问题 更多 >