我想在数据框中添加一系列列,其名称和值是同一行中其他列的函数。考虑下面的例子,我在其中添加一个1997q1栏(即1997年第一季度),其值是1997年前三个月数据的总和。这很容易自己完成,但我想在多年的时间内为每个季度创建一个新列。
例如,如果我从数据帧开始:
我想以下面的数据帧结束(包括1997-xx列,但必须删除它们):
答案 0 :(得分:0)
使用df.sum()
:
FirstOrDefault()
答案 1 :(得分: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