Python 从现有数据框列名创建新的数据框列
我有一个数据框(stockData),它有三种不同类型的数据(按日期索引)的库存数据,分别是LAST、VOLUME和MKTCAP 这是数据帧的头部(stockData) 是否有一种方法可以将这些字段中的一个字段用于所有股票使用新的post fix(_HOLIDAY)从该数据创建一组新的列,因此我最终得到:Python 从现有数据框列名创建新的数据框列,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据框(stockData),它有三种不同类型的数据(按日期索引)的库存数据,分别是LAST、VOLUME和MKTCAP 这是数据帧的头部(stockData) 是否有一种方法可以将这些字段中的一个字段用于所有股票使用新的post fix(_HOLIDAY)从该数据创建一组新的列,因此我最终得到: BBG.XLON.BTA.S_LAST BBG.XLON.BTA.S_VOLUME BBG.XLON.BTA.S_MKTCAP BBG.XLON.BTA.S_
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
非常感谢您的帮助。您可以使用获取列名,然后在最后一个点(.)之后删除子字符串:
这里我假设您的数据帧被称为df
。
这将导致名称重复(对于.S\u LAST
、.S\u VOLUME
和.S\u MKTCAP
)。现在,您可以使用删除重复项:
import numpy as np
uNames=np.unique(names)
现在,您可以添加新列.S\u 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']
然后,您可以轻松添加新列:
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]
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]