2017-02-19 11 views
2

Я хотел бы добавить ряд столбцов в dataframe, чьи имена и значения являются функцией других столбцов в той же строке. Рассмотрим приведенный ниже пример, где я добавляю столбец 1997q1 (т. Е. Первый квартал 1997 года), значения которого являются суммой данных за первые три месяца 1997 года. Этого достаточно легко сделать самостоятельно, однако я хотел бы создать новую колонку для каждой четверти в течение многих лет.Как добавить столбец в фреймворк данных, чье имя и значение являются функцией других столбцов?

Например, если я начну с dataframe:

enter image description here

Я хотел бы закончить со следующим dataframe (в 1997-хх колонки включены, но они должны быть удалены):

enter image description here

ответ

0

Использование df.sum():

df['q1'] = df[['1997-01', '1997-02', '1997-03']].sum(axis=1) 

df 
Out[66]: 
      RegionName  State 1997-01 1997-02 1997-03  q1 
0 New   York  NY  NaN  NaN  NaN  0.0 
1 Los  Angeles  CA 155900.0 157000.0 157700.0 470600.0 
2 Chicago   IL 110800.0 111300.0 111700.0  NaN 223000.0 
0

Предположим, что мы имеем следующую DF: первый экстракт

In [323]: df 
Out[323]: 
    RegionName State 1997-01 1997-02 1997-03 1997-04 1997-11 
0  New York NY  NaN  NaN  NaN  NaN  NaN 
1 Los Angeles CA  1.0  1.0  1.0  1.0  1.0 
2  Chicago IL  2.0  2.0  2.0  2.0  2.0 

ДАВАЙТЕ только date колонки:

In [324]: x = df[df.columns[df.columns.str.contains(r'\d{4}\-\d{2}')]] 

In [325]: x 
Out[325]: 
    1997-01 1997-02 1997-03 1997-04 1997-11 
0  NaN  NaN  NaN  NaN  NaN 
1  1.0  1.0  1.0  1.0  1.0 
2  2.0  2.0  2.0  2.0  2.0 

теперь мы можем группировать по PeriodIndex(..., freq='Q'))

In [326]: new = x.groupby(pd.PeriodIndex(x.columns, freq='Q'), axis=1).sum() 

In [327]: new 
Out[327]: 
    1997Q1 1997Q2 1997Q4 
0  NaN  NaN  NaN 
1  3.0  1.0  1.0 
2  6.0  2.0  2.0 

, наконец, мы можем присоединиться к его оригинал DF:

In [328]: df.join(new) 
Out[328]: 
    RegionName State 1997-01 1997-02 1997-03 1997-04 1997-11 1997Q1 1997Q2 1997Q4 
0  New York NY  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN 
1 Los Angeles CA  1.0  1.0  1.0  1.0  1.0  3.0  1.0  1.0 
2  Chicago IL  2.0  2.0  2.0  2.0  2.0  6.0  2.0  2.0