我有一个名为'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
但我不知道我会怎么做。我想我可能必须拆分列名,然后一些如何编写每个部分一个元素的不同列表,但需要帮助来了解如何执行操作。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以list
使用column
对df.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.unique
见docs。
答案 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')