Python 如何将名称和值是其他列函数的列添加到数据帧中?
我想向dataframe添加一系列列,这些列的名称和值是同一行中其他列的函数。考虑下面的例子,在这里我添加了一个列,即77q1(即1997的第一个季度),其值是1997个数据的前三个月的总和。这很容易单独完成,但是我想在多年的时间里为每个季度创建一个新专栏 例如,如果我从数据帧开始: 我想以以下数据帧结束(包括1997 xx列,但必须删除它们): 使用: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-
假设我们有以下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