2016-04-24 6 views
-1

У меня есть dataframe (stockData), который имеет данные запаса для трех разных типов данных (индексированных по дате), это LAST, VOLUME, MKTCAP.Создание новых столбцов данных из существующих имен столбцов данных данных

здесь глава dataframe (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 

Любая помощь будет очень признательна.

ответ

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] 
0

Вы можете использовать DataFrame.columns.values, чтобы получить имена столбцов, а затем раздеться подстроку после и включая последнюю точку (.):

names=[s[:s.rfind('.')] for s in df.columns.values] 

Здесь я предполагаю, что ваш dataframe называется df. Это приведет к дублированию имен (для .S_LAST, .S_VOLUME и .S_MKTCAP). Теперь вы можете использовать numpy.unique для удаления дубликатов:

import numpy as np 
uNames=np.unique(names) 

И теперь вы можете добавить свой новый столбец <name>.S_HOLIDAY присвоения значения NaN:

for n in uNames: 
    df[n+'.S_HOLIDAY']=np.NaN 
Смежные вопросы