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

时间:2017-02-19 21:19:08

标签: python pandas dataframe group-by

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

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

enter image description here

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

enter image description here

2 个答案:

答案 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