Python 如何将名称和值是其他列函数的列添加到数据帧中?

Python 如何将名称和值是其他列函数的列添加到数据帧中?,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,我想向dataframe添加一系列列,这些列的名称和值是同一行中其他列的函数。考虑下面的例子,在这里我添加了一个列,即77q1(即1997的第一个季度),其值是1997个数据的前三个月的总和。这很容易单独完成,但是我想在多年的时间里为每个季度创建一个新专栏 例如,如果我从数据帧开始: 我想以以下数据帧结束(包括1997 xx列,但必须删除它们): 使用: 假设我们有以下DF: In [323]: df Out[323]: RegionName State 1997-01 1997-

我想向dataframe添加一系列列,这些列的名称和值是同一行中其他列的函数。考虑下面的例子,在这里我添加了一个列,即77q1(即1997的第一个季度),其值是1997个数据的前三个月的总和。这很容易单独完成,但是我想在多年的时间里为每个季度创建一个新专栏

例如,如果我从数据帧开始:

我想以以下数据帧结束(包括1997 xx列,但必须删除它们):

使用:


假设我们有以下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
现在我们可以分组了

最后,我们可以将其与原始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
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
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