创建列名称的一部分的明确列表

时间:2016-05-30 11:23:04

标签: python pandas

我有一个名为'stockData'的DataFrame。下面是一个非常小的示例的头部,其中包含所有不同类型的列名称。

            BBG.XLON.BTA.S_RAWLAST  BBG.XLON.BTA.S_RAWVOLUME  \
date                                                           
2008-02-04                  262.00                  23397414   
2008-02-05                  257.25                  35213970   
2008-02-06                  262.75                  41323308   
2008-02-07                  237.00                 123276113   
2008-02-08                  231.00                  76456078   

            BBG.XLON.BTA.S_MKTCAP  BBG.XLON.BTA.S_RAWVWAP  \
date                                                        
2008-02-04             20875.7353                263.4303   
2008-02-05             20497.5582                261.6408   
2008-02-06             20935.7956                262.3705   
2008-02-07             18884.0477                241.9444   
2008-02-08             18389.9269                234.4538   

            BBG.XLON.BTA.S_RAWCLOSE  BBG.XLON.BTA.S_LAST_ADJ  \
date                                                           
2008-02-04                   262.00                   262.00   
2008-02-05                   257.25                   257.25   
2008-02-06                   262.75                   262.75   
2008-02-07                   237.00                   237.00   
2008-02-08                   231.00                   231.00   

            BBG.XLON.BTA.S_VWAP_ADJ  BBG.XLON.BTA.S_VOLUME_ADJ  \
date                                                             
2008-02-04                 263.4303                   23397414   
2008-02-05                 261.6408                   35213970   
2008-02-06                 262.3705                   41323308   
2008-02-07                 241.9444                  123276113   
2008-02-08                 234.4538                   76456078   

            BBG.XLON.BTA.S_CLOSE_ADJ  BBG.XLON.VOD.S_RAWLAST  \
date                                                           
2008-02-04                    262.00                   177.9   
2008-02-05                    257.25                   173.6   
2008-02-06                    262.75                   174.2   
2008-02-07                    237.00                   170.0   
2008-02-08                    231.00                   174.3   

              BBG.XLON.VOD.S_VOLUME_ADJ  \
date                    ...                                           
2008-02-04              ...                               114868730   
2008-02-05              ...                               165372960   
2008-02-06              ...                               154129543   
2008-02-07              ...                               187932809   
2008-02-08              ...                               160997280   

            BBG.XLON.VOD.S_CLOSE_ADJ  BBG.XLON.VOD.S_EXCHANGE_HOLIDAY  \
date                                                                    
2008-02-04                     177.9                              NaN   
2008-02-05                     173.6                              NaN   
2008-02-06                     174.2                              NaN   
2008-02-07                     170.0                              NaN   
2008-02-08                     174.3                              NaN   

            BBG.XLON.VOD.S_CORP_ACTION  BBG.XLON.VOD.S_REPORTING  \
date                                                               
2008-02-04                         NaN                       NaN   
2008-02-05                         NaN                       NaN   
2008-02-06                         NaN                       NaN   
2008-02-07                         NaN                       NaN   
2008-02-08                         NaN                       NaN   

            BBG.XLON.VOD.S_FX  BBG.XLON.VOD.S_LAST_ADJ_EUR  \
date                                                         
2008-02-04             1.3307                    236.73153   
2008-02-05             1.3411                    232.81496   
2008-02-06             1.3406                    233.53252   
2008-02-07             1.3410                    227.97000   
2008-02-08             1.3415                    233.82345   

            BBG.XLON.VOD.S_MKTCAP_EUR  BBG.XLON.VOD.S_VWAP_ADJ_EUR  \
date                                                                 
2008-02-04              125761.886753                   237.215373   
2008-02-05              123681.237732                   235.310211   
2008-02-06              124062.436220                   233.089586   
2008-02-07              121107.388396                   229.125137   
2008-02-08              124216.990692                   233.210250   

            BBG.XLON.VOD.S_CLOSE_ADJ_EUR  
date                                      
2008-02-04                     236.73153  
2008-02-05                     232.81496  
2008-02-06                     233.53252  
2008-02-07                     227.97000  
2008-02-08                     233.82345  

列标题由2个部分组成 第一部分 - 公司名称(例如BBG.XLON.BTA.S) 第二部分 - 列中数据的描述(例如RAWCLOSE)

我想获得所有列名称(所有部分名称)的明确列表。从数据框架中可以看出,每家公司都拥有更多的一列数据,而且可能有数百家公司。

因此,在这个只有两只股票的例子中,我希望返回一个类似于:

的数据框
id
BBG.XLON.BTA.S
BBG.XLON.VOD.S

但我不知道我会怎么做。我想我可能必须拆分列名,然后一些如何编写每个部分一个元素的不同列表,但需要帮助来了解如何执行操作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以list使用columndf.columns名称进行.split('_')理解,使用np.unique()并仅保留第一部分以获取股票名称,然后使用{{ 1}}删除重复项并转换为pd.Series

import numpy as np
import pandas as pd
pd.Series(np.unique([col.split('_')[0] for col in df.columns]), name='id')

np.uniquedocs

答案 1 :(得分:0)

您可以使用pandas的Series.str.extract和正则表达式来做到这一点,如下所示:

s = pd.Series(df.columns)  # assuming your DataFrame is `df`

s.str.extract('^([^_]+)', expand=False).unique()

# returns
# array(['BBG.XLON.BTA.S', 'BBG.XLON.VOD.S'], dtype=object)

然后您可以将其发送到pd.Series( , name='id')