我想添加一系列的列到一個數據框,其名稱和值是同一行中的其他列的函數。考慮下面的例子,我在其中添加了一列1997年1月(即1997年第一季度),其值是1997年前三個月數據的總和。這很容易完成,但是我想在多年的時間內爲每個季度創建一個新列。如何向其名稱和值是其他列的函數的數據框添加列?
例如,如果我開始與數據框:
我想用下面的數據框結束(1997-XX列包括在內,但他們必須被刪除):
我想添加一系列的列到一個數據框,其名稱和值是同一行中的其他列的函數。考慮下面的例子,我在其中添加了一列1997年1月(即1997年第一季度),其值是1997年前三個月數據的總和。這很容易完成,但是我想在多年的時間內爲每個季度創建一個新列。如何向其名稱和值是其他列的函數的數據框添加列?
例如,如果我開始與數據框:
我想用下面的數據框結束(1997-XX列包括在內,但他們必須被刪除):
使用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
假設我們有以下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