我有一个数据框(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
有没有办法让所有股票的其中一个字段从这个数据创建一组新的列与新的修复后(_HOLIDAY)所以我最终得到:
BBG.XLON.BTA.S_LAST BBG.XLON.BTA.S_VOLUME BBG.XLON.BTA.S_MKTCAP BBG.XLON.BTA.S_HOLIDAY \
date
2001-01-02 572 26605510 37494.60 NaN
2001-01-03 560 24715470 36708.00 NaN
2001-01-04 613 52781855 40182.15 NaN
2001-01-05 630 56600152 41296.50 NaN
2001-01-08 633 41014402 41493.15 NaN
BBG.XLON.VOD.S_LAST BBG.XLON.VOD.S_VOLUME BBG.XLON.VOD.S_MKTCAP BBG.XLON.VOD.S_HOLIDAY
date
2001-01-02 NaN NaN NaN NaN
2001-01-03 225.00 444328736 145216.0020 NaN
2001-01-04 239.00 488568000 154251.6643 NaN
2001-01-05 242.25 237936704 156349.2288 NaN
2001-01-08 227.75 658059776 146990.8642 NaN
非常感谢任何帮助。
答案 0 :(得分:1)
是你想要的吗?
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']
然后您可以轻松添加新列:
In [65]: for col in newcols:
....: df[col] = np.nan
....:
In [66]: df
Out[66]:
BBG.XLON.BTA.S_LAST BBG.XLON.BTA.S_VOLUME BBG.XLON.BTA.S_MKTCAP \
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 \
2001-01-02 NaN NaN NaN
2001-01-03 225.00 444328736.0 145216.0020
2001-01-04 239.00 488568000.0 154251.6643
2001-01-05 242.25 237936704.0 156349.2288
2001-01-08 227.75 658059776.0 146990.8642
BBG.XLON.BTA.S_HOLIDAY BBG.XLON.VOD.S_HOLIDAY
2001-01-02 NaN NaN
2001-01-03 NaN NaN
2001-01-04 NaN NaN
2001-01-05 NaN NaN
2001-01-08 NaN NaN
如果列的顺序对您很重要,您可以像这样重新排序:
df = df[ordered_column_list]
答案 1 :(得分:0)
您可以使用DataFrame.columns.values
获取列名,然后在包含最后一个点(。)后删除子字符串:
MatchError
这里我假设您的数据框名为names=[s[:s.rfind('.')] for s in df.columns.values]
。
这将导致重复的名称(df
,.S_LAST
和.S_VOLUME
)。现在,您可以使用numpy.unique
删除重复项:
.S_MKTCAP
现在您可以添加新列import numpy as np
uNames=np.unique(names)
来指定NaN值:
<name>.S_HOLIDAY