创建部分列名的独特列表

2024-10-06 12:28:30 发布

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

我有一个DataFrame叫做“stockData”。下面是一个非常小的示例的开头,该示例包含所有不同类型的列名。你知道吗

            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  

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

我想得到一个所有列名(所有部分)的不同列表。从数据框中可以看到,每个公司都有不止一列的数据,而且可能有数百家公司。你知道吗

所以在这个只有两个股票的例子中,我想返回一个如下所示的数据帧:

id
BBG.XLON.BTA.S
BBG.XLON.VOD.S

但我不知道该怎么做。我想我可能需要拆分列名,然后一些如何编写每个第一部分元素的不同列表,但在如何执行操作方面需要帮助。你知道吗


Tags: 数据示例closedate公司naneurvod
2条回答

您可以使用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')

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

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

docs了解np.unique。你知道吗

相关问题 更多 >